Harald Welte has submitted this change and it was merged.

Change subject: split scheduler_mframe.c from scheduler.c
......................................................................


split scheduler_mframe.c from scheduler.c

There are use cases for the multiframe scheduler tables outside the
context of the entire scheduler. Let's prepare for that.

Related: OS#2978
Change-Id: I6a501e66c47809ae3cdc55bef2cb6390ee0096b1
---
M include/osmo-bts/scheduler.h
M src/common/Makefile.am
M src/common/scheduler.c
A src/common/scheduler_mframe.c
M src/osmo-bts-trx/Makefile.am
M src/osmo-bts-virtual/Makefile.am
6 files changed, 857 insertions(+), 818 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h
index 11a30fd..4d34315 100644
--- a/include/osmo-bts/scheduler.h
+++ b/include/osmo-bts/scheduler.h
@@ -188,7 +188,37 @@
 /* \brief close all logical channels and reset timeslots */
 void trx_sched_reset(struct l1sched_trx *l1t);
 
+
+/* frame structures */
+struct trx_sched_frame {
+       /*! \brief downlink TRX channel type */
+       enum trx_chan_type              dl_chan;
+       /*! \brief downlink block ID */
+       uint8_t                         dl_bid;
+       /*! \brief uplink TRX channel type */
+       enum trx_chan_type              ul_chan;
+       /*! \brief uplink block ID */
+       uint8_t                         ul_bid;
+};
+
+/* multiframe structure */
+struct trx_sched_multiframe {
+       /*! \brief physical channel config (channel combination) */
+       enum gsm_phys_chan_config       pchan;
+       /*! \brief applies to which timeslots? */
+       uint8_t                         slotmask;
+       /*! \brief repeats how many frames */
+       uint8_t                         period;
+       /*! \brief pointer to scheduling structure */
+       const struct trx_sched_frame    *frames;
+       /*! \brief human-readable name */
+       const char                      *name;
+};
+
+int find_sched_mframe_idx(enum gsm_phys_chan_config pchan, uint8_t tn);
+
 /*! Determine if given frame number contains SACCH (true) or other (false) 
burst */
 bool trx_sched_is_sacch_fn(struct gsm_bts_trx_ts *ts, uint32_t fn, bool 
uplink);
+extern const struct trx_sched_multiframe trx_sched_multiframes[];
 
 #endif /* TRX_SCHEDULER_H */
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 67f3e80..113ff2f 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -12,6 +12,6 @@
                   load_indication.c pcu_sock.c handover.c msg_utils.c \
                   tx_power.c bts_ctrl_commands.c bts_ctrl_lookup.c \
                   l1sap.c cbch.c power_control.c main.c phy_link.c \
-                  dtx_dl_amr_fsm.c
+                  dtx_dl_amr_fsm.c scheduler_mframe.c
 
 libl1sched_a_SOURCES = scheduler.c
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
index e6e7eaf..90de09c 100644
--- a/src/common/scheduler.c
+++ b/src/common/scheduler.c
@@ -565,821 +565,6 @@
        return rts_tch_common(l1t, tn, fn, chan, ((fn % 26) >> 2) & 1);
 }
 
-/*
- * multiframe structure
- */
-
-/* frame structures */
-struct trx_sched_frame {
-       /*! \brief downlink TRX channel type */
-       enum trx_chan_type              dl_chan;
-       /*! \brief downlink block ID */
-       uint8_t                         dl_bid;
-       /*! \brief uplink TRX channel type */
-       enum trx_chan_type              ul_chan;
-       /*! \brief uplink block ID */
-       uint8_t                         ul_bid;
-};
-
-static const struct trx_sched_frame frame_bcch[51] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_BCCH,     0,      TRXC_RACH,      0 }, { TRXC_BCCH,       1,      
TRXC_RACH,      0 }, { TRXC_BCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_BCCH,       3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
-      {        TRXC_IDLE,      0,      TRXC_RACH,      0 },
-};
-
-static const struct trx_sched_frame frame_bcch_sdcch4[102] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      {        TRXC_FCCH,      0,      TRXC_SDCCH4_3,  0 },
-      {        TRXC_SCH,       0,      TRXC_SDCCH4_3,  1 },
-      { TRXC_BCCH,     0,      TRXC_SDCCH4_3,  2 },
-      { TRXC_BCCH,     1,      TRXC_SDCCH4_3,  3 },
-      { TRXC_BCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_BCCH,     3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_SACCH4_2,  0 },
-      { TRXC_CCCH,     1,      TRXC_SACCH4_2,  1 },
-      { TRXC_CCCH,     2,      TRXC_SACCH4_2,  2 },
-      { TRXC_CCCH,     3,      TRXC_SACCH4_2,  3 },
-      {        TRXC_FCCH,      0,      TRXC_SACCH4_3,  0 },
-      {        TRXC_SCH,       0,      TRXC_SACCH4_3,  1 },
-      { TRXC_CCCH,     0,      TRXC_SACCH4_3,  2 },
-      { TRXC_CCCH,     1,      TRXC_SACCH4_3,  3 },
-      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     1,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 3,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 3,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_3, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_3, 1,      TRXC_SDCCH4_0,  0 },
-      { TRXC_SDCCH4_3, 2,      TRXC_SDCCH4_0,  1 },
-      { TRXC_SDCCH4_3, 3,      TRXC_SDCCH4_0,  2 },
-      {        TRXC_FCCH,      0,      TRXC_SDCCH4_0,  3 },
-      {        TRXC_SCH,       0,      TRXC_SDCCH4_1,  0 },
-      { TRXC_SACCH4_0, 0,      TRXC_SDCCH4_1,  1 },
-      { TRXC_SACCH4_0, 1,      TRXC_SDCCH4_1,  2 },
-      { TRXC_SACCH4_0, 2,      TRXC_SDCCH4_1,  3 },
-      { TRXC_SACCH4_0, 3,      TRXC_RACH,      0 },
-      { TRXC_SACCH4_1, 0,      TRXC_RACH,      0 },
-      { TRXC_SACCH4_1, 1,      TRXC_SDCCH4_2,  0 },
-      { TRXC_SACCH4_1, 2,      TRXC_SDCCH4_2,  1 },
-      { TRXC_SACCH4_1, 3,      TRXC_SDCCH4_2,  2 },
-      {        TRXC_IDLE,      0,      TRXC_SDCCH4_2,  3 },
-
-      {        TRXC_FCCH,      0,      TRXC_SDCCH4_3,  0 },
-      {        TRXC_SCH,       0,      TRXC_SDCCH4_3,  1 },
-      { TRXC_BCCH,     0,      TRXC_SDCCH4_3,  2 },
-      { TRXC_BCCH,     1,      TRXC_SDCCH4_3,  3 },
-      { TRXC_BCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_BCCH,     3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_SACCH4_0,  0 },
-      { TRXC_CCCH,     1,      TRXC_SACCH4_0,  1 },
-      { TRXC_CCCH,     2,      TRXC_SACCH4_0,  2 },
-      { TRXC_CCCH,     3,      TRXC_SACCH4_0,  3 },
-      {        TRXC_FCCH,      0,      TRXC_SACCH4_1,  0 },
-      {        TRXC_SCH,       0,      TRXC_SACCH4_1,  1 },
-      { TRXC_CCCH,     0,      TRXC_SACCH4_1,  2 },
-      { TRXC_CCCH,     1,      TRXC_SACCH4_1,  3 },
-      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     0,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     1,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
-      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_0, 3,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_1, 3,      TRXC_RACH,      0 },
-      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
-      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 1,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 2,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_2, 3,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_3, 0,      TRXC_RACH,      0 },
-      { TRXC_SDCCH4_3, 1,      TRXC_SDCCH4_0,  0 },
-      { TRXC_SDCCH4_3, 2,      TRXC_SDCCH4_0,  1 },
-      { TRXC_SDCCH4_3, 3,      TRXC_SDCCH4_0,  2 },
-      {        TRXC_FCCH,      0,      TRXC_SDCCH4_0,  3 },
-      {        TRXC_SCH,       0,      TRXC_SDCCH4_1,  0 },
-      { TRXC_SACCH4_2, 0,      TRXC_SDCCH4_1,  1 },
-      { TRXC_SACCH4_2, 1,      TRXC_SDCCH4_1,  2 },
-      { TRXC_SACCH4_2, 2,      TRXC_SDCCH4_1,  3 },
-      { TRXC_SACCH4_2, 3,      TRXC_RACH,      0 },
-      { TRXC_SACCH4_3, 0,      TRXC_RACH,      0 },
-      { TRXC_SACCH4_3, 1,      TRXC_SDCCH4_2,  0 },
-      { TRXC_SACCH4_3, 2,      TRXC_SDCCH4_2,  1 },
-      { TRXC_SACCH4_3, 3,      TRXC_SDCCH4_2,  2 },
-      {        TRXC_IDLE,      0,      TRXC_SDCCH4_2,  3 },
-};
-
-static const struct trx_sched_frame frame_sdcch8[102] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_SDCCH8_0, 0,      TRXC_SACCH8_5,  0 },
-      { TRXC_SDCCH8_0, 1,      TRXC_SACCH8_5,  1 },
-      { TRXC_SDCCH8_0, 2,      TRXC_SACCH8_5,  2 },
-      { TRXC_SDCCH8_0, 3,      TRXC_SACCH8_5,  3 },
-      { TRXC_SDCCH8_1, 0,      TRXC_SACCH8_6,  0 },
-      { TRXC_SDCCH8_1, 1,      TRXC_SACCH8_6,  1 },
-      { TRXC_SDCCH8_1, 2,      TRXC_SACCH8_6,  2 },
-      { TRXC_SDCCH8_1, 3,      TRXC_SACCH8_6,  3 },
-      { TRXC_SDCCH8_2, 0,      TRXC_SACCH8_7,  0 },
-      { TRXC_SDCCH8_2, 1,      TRXC_SACCH8_7,  1 },
-      { TRXC_SDCCH8_2, 2,      TRXC_SACCH8_7,  2 },
-      { TRXC_SDCCH8_2, 3,      TRXC_SACCH8_7,  3 },
-      { TRXC_SDCCH8_3, 0,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 1,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 2,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 3,      TRXC_SDCCH8_0,  0 },
-      { TRXC_SDCCH8_4, 0,      TRXC_SDCCH8_0,  1 },
-      { TRXC_SDCCH8_4, 1,      TRXC_SDCCH8_0,  2 },
-      { TRXC_SDCCH8_4, 2,      TRXC_SDCCH8_0,  3 },
-      { TRXC_SDCCH8_4, 3,      TRXC_SDCCH8_1,  0 },
-      { TRXC_SDCCH8_5, 0,      TRXC_SDCCH8_1,  1 },
-      { TRXC_SDCCH8_5, 1,      TRXC_SDCCH8_1,  2 },
-      { TRXC_SDCCH8_5, 2,      TRXC_SDCCH8_1,  3 },
-      { TRXC_SDCCH8_5, 3,      TRXC_SDCCH8_2,  0 },
-      { TRXC_SDCCH8_6, 0,      TRXC_SDCCH8_2,  1 },
-      { TRXC_SDCCH8_6, 1,      TRXC_SDCCH8_2,  2 },
-      { TRXC_SDCCH8_6, 2,      TRXC_SDCCH8_2,  3 },
-      { TRXC_SDCCH8_6, 3,      TRXC_SDCCH8_3,  0 },
-      { TRXC_SDCCH8_7, 0,      TRXC_SDCCH8_3,  1 },
-      { TRXC_SDCCH8_7, 1,      TRXC_SDCCH8_3,  2 },
-      { TRXC_SDCCH8_7, 2,      TRXC_SDCCH8_3,  3 },
-      { TRXC_SDCCH8_7, 3,      TRXC_SDCCH8_4,  0 },
-      { TRXC_SACCH8_0, 0,      TRXC_SDCCH8_4,  1 },
-      { TRXC_SACCH8_0, 1,      TRXC_SDCCH8_4,  2 },
-      { TRXC_SACCH8_0, 2,      TRXC_SDCCH8_4,  3 },
-      { TRXC_SACCH8_0, 3,      TRXC_SDCCH8_5,  0 },
-      { TRXC_SACCH8_1, 0,      TRXC_SDCCH8_5,  1 },
-      { TRXC_SACCH8_1, 1,      TRXC_SDCCH8_5,  2 },
-      { TRXC_SACCH8_1, 2,      TRXC_SDCCH8_5,  3 },
-      { TRXC_SACCH8_1, 3,      TRXC_SDCCH8_6,  0 },
-      { TRXC_SACCH8_2, 0,      TRXC_SDCCH8_6,  1 },
-      { TRXC_SACCH8_2, 1,      TRXC_SDCCH8_6,  2 },
-      { TRXC_SACCH8_2, 2,      TRXC_SDCCH8_6,  3 },
-      { TRXC_SACCH8_2, 3,      TRXC_SDCCH8_7,  0 },
-      { TRXC_SACCH8_3, 0,      TRXC_SDCCH8_7,  1 },
-      { TRXC_SACCH8_3, 1,      TRXC_SDCCH8_7,  2 },
-      { TRXC_SACCH8_3, 2,      TRXC_SDCCH8_7,  3 },
-      { TRXC_SACCH8_3, 3,      TRXC_SACCH8_0,  0 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  1 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  2 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  3 },
-
-      { TRXC_SDCCH8_0, 0,      TRXC_SACCH8_1,  0 },
-      { TRXC_SDCCH8_0, 1,      TRXC_SACCH8_1,  1 },
-      { TRXC_SDCCH8_0, 2,      TRXC_SACCH8_1,  2 },
-      { TRXC_SDCCH8_0, 3,      TRXC_SACCH8_1,  3 },
-      { TRXC_SDCCH8_1, 0,      TRXC_SACCH8_2,  0 },
-      { TRXC_SDCCH8_1, 1,      TRXC_SACCH8_2,  1 },
-      { TRXC_SDCCH8_1, 2,      TRXC_SACCH8_2,  2 },
-      { TRXC_SDCCH8_1, 3,      TRXC_SACCH8_2,  3 },
-      { TRXC_SDCCH8_2, 0,      TRXC_SACCH8_3,  0 },
-      { TRXC_SDCCH8_2, 1,      TRXC_SACCH8_3,  1 },
-      { TRXC_SDCCH8_2, 2,      TRXC_SACCH8_3,  2 },
-      { TRXC_SDCCH8_2, 3,      TRXC_SACCH8_3,  3 },
-      { TRXC_SDCCH8_3, 0,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 1,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 2,      TRXC_IDLE,      0 },
-      { TRXC_SDCCH8_3, 3,      TRXC_SDCCH8_0,  0 },
-      { TRXC_SDCCH8_4, 0,      TRXC_SDCCH8_0,  1 },
-      { TRXC_SDCCH8_4, 1,      TRXC_SDCCH8_0,  2 },
-      { TRXC_SDCCH8_4, 2,      TRXC_SDCCH8_0,  3 },
-      { TRXC_SDCCH8_4, 3,      TRXC_SDCCH8_1,  0 },
-      { TRXC_SDCCH8_5, 0,      TRXC_SDCCH8_1,  1 },
-      { TRXC_SDCCH8_5, 1,      TRXC_SDCCH8_1,  2 },
-      { TRXC_SDCCH8_5, 2,      TRXC_SDCCH8_1,  3 },
-      { TRXC_SDCCH8_5, 3,      TRXC_SDCCH8_2,  0 },
-      { TRXC_SDCCH8_6, 0,      TRXC_SDCCH8_2,  1 },
-      { TRXC_SDCCH8_6, 1,      TRXC_SDCCH8_2,  2 },
-      { TRXC_SDCCH8_6, 2,      TRXC_SDCCH8_2,  3 },
-      { TRXC_SDCCH8_6, 3,      TRXC_SDCCH8_3,  0 },
-      { TRXC_SDCCH8_7, 0,      TRXC_SDCCH8_3,  1 },
-      { TRXC_SDCCH8_7, 1,      TRXC_SDCCH8_3,  2 },
-      { TRXC_SDCCH8_7, 2,      TRXC_SDCCH8_3,  3 },
-      { TRXC_SDCCH8_7, 3,      TRXC_SDCCH8_4,  0 },
-      { TRXC_SACCH8_4, 0,      TRXC_SDCCH8_4,  1 },
-      { TRXC_SACCH8_4, 1,      TRXC_SDCCH8_4,  2 },
-      { TRXC_SACCH8_4, 2,      TRXC_SDCCH8_4,  3 },
-      { TRXC_SACCH8_4, 3,      TRXC_SDCCH8_5,  0 },
-      { TRXC_SACCH8_5, 0,      TRXC_SDCCH8_5,  1 },
-      { TRXC_SACCH8_5, 1,      TRXC_SDCCH8_5,  2 },
-      { TRXC_SACCH8_5, 2,      TRXC_SDCCH8_5,  3 },
-      { TRXC_SACCH8_5, 3,      TRXC_SDCCH8_6,  0 },
-      { TRXC_SACCH8_6, 0,      TRXC_SDCCH8_6,  1 },
-      { TRXC_SACCH8_6, 1,      TRXC_SDCCH8_6,  2 },
-      { TRXC_SACCH8_6, 2,      TRXC_SDCCH8_6,  3 },
-      { TRXC_SACCH8_6, 3,      TRXC_SDCCH8_7,  0 },
-      { TRXC_SACCH8_7, 0,      TRXC_SDCCH8_7,  1 },
-      { TRXC_SACCH8_7, 1,      TRXC_SDCCH8_7,  2 },
-      { TRXC_SACCH8_7, 2,      TRXC_SDCCH8_7,  3 },
-      { TRXC_SACCH8_7, 3,      TRXC_SACCH8_4,  0 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  1 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  2 },
-      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  3 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts0[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts1[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts2[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts3[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts4[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts5[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts6[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-};
-
-static const struct trx_sched_frame frame_tchf_ts7[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
-      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
-};
-
-static const struct trx_sched_frame frame_tchh_ts01[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
-};
-
-static const struct trx_sched_frame frame_tchh_ts23[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
-};
-
-static const struct trx_sched_frame frame_tchh_ts45[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
-};
-
-static const struct trx_sched_frame frame_tchh_ts67[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
-      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
-};
-
-static const struct trx_sched_frame frame_pdch[104] = {
-/*     dl_chan         dl_bid  ul_chan         ul_bid */
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PTCCH,    0,      TRXC_PTCCH,     0 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PTCCH,    1,      TRXC_PTCCH,     1 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PTCCH,    2,      TRXC_PTCCH,     2 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PTCCH,    3,      TRXC_PTCCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
-      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
-};
-
-/* multiframe structure */
-struct trx_sched_multiframe {
-       /*! \brief physical channel config (channel combination) */
-       enum gsm_phys_chan_config       pchan;
-       /*! \brief applies to which timeslots? */
-       uint8_t                         slotmask;
-       /*! \brief repeats how many frames */
-       uint8_t                         period;
-       /*! \brief pointer to scheduling structure */
-       const struct trx_sched_frame    *frames;
-       /*! \brief human-readable name */
-       const char                      *name;
-};
-
-static const struct trx_sched_multiframe trx_sched_multiframes[] = {
-       { GSM_PCHAN_NONE,               0xff,   0,      NULL,                   
"NONE"},
-       { GSM_PCHAN_CCCH,               0xff,   51,     frame_bcch,             
"BCCH+CCCH" },
-       { GSM_PCHAN_CCCH_SDCCH4,        0xff,   102,    frame_bcch_sdcch4,      
"BCCH+CCCH+SDCCH/4+SACCH/4" },
-       { GSM_PCHAN_SDCCH8_SACCH8C,     0xff,   102,    frame_sdcch8,           
"SDCCH/8+SACCH/8" },
-       { GSM_PCHAN_TCH_F,              0x01,   104,    frame_tchf_ts0,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x02,   104,    frame_tchf_ts1,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x04,   104,    frame_tchf_ts2,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x08,   104,    frame_tchf_ts3,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x10,   104,    frame_tchf_ts4,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x20,   104,    frame_tchf_ts5,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x40,   104,    frame_tchf_ts6,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_F,              0x80,   104,    frame_tchf_ts7,         
"TCH/F+SACCH" },
-       { GSM_PCHAN_TCH_H,              0x03,   104,    frame_tchh_ts01,        
"TCH/H+SACCH" },
-       { GSM_PCHAN_TCH_H,              0x0c,   104,    frame_tchh_ts23,        
"TCH/H+SACCH" },
-       { GSM_PCHAN_TCH_H,              0x30,   104,    frame_tchh_ts45,        
"TCH/H+SACCH" },
-       { GSM_PCHAN_TCH_H,              0xc0,   104,    frame_tchh_ts67,        
"TCH/H+SACCH" },
-       { GSM_PCHAN_PDCH,               0xff,   104,    frame_pdch,             
"PDCH" },
-};
-
-
-/*
- * scheduler functions
- */
-
-static int find_sched_mframe_idx(enum gsm_phys_chan_config pchan, uint8_t tn)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(trx_sched_multiframes); i++) {
-               if (trx_sched_multiframes[i].pchan == pchan
-                && (trx_sched_multiframes[i].slotmask & (1 << tn))) {
-                       return i;
-               }
-       }
-       return -1;
-}
-
-/* Determine if given frame number contains SACCH (true) or other (false) 
burst */
-bool trx_sched_is_sacch_fn(struct gsm_bts_trx_ts *ts, uint32_t fn, bool uplink)
-{
-       int i;
-       const struct trx_sched_multiframe *sched;
-       const struct trx_sched_frame *frame;
-       enum trx_chan_type ch_type;
-
-       i = find_sched_mframe_idx(ts->pchan, ts->nr);
-       if (i < 0)
-               return -EINVAL;
-       sched = &trx_sched_multiframes[i];
-       frame = &sched->frames[fn % sched->period];
-       if (uplink)
-               ch_type = frame->ul_chan;
-       else
-               ch_type = frame->dl_chan;
-
-       switch (ch_type) {
-       case TRXC_SACCH4_0:
-       case TRXC_SACCH4_1:
-       case TRXC_SACCH4_2:
-       case TRXC_SACCH4_3:
-       case TRXC_SACCH8_0:
-       case TRXC_SACCH8_1:
-       case TRXC_SACCH8_2:
-       case TRXC_SACCH8_3:
-       case TRXC_SACCH8_4:
-       case TRXC_SACCH8_5:
-       case TRXC_SACCH8_6:
-       case TRXC_SACCH8_7:
-       case TRXC_SACCHTF:
-       case TRXC_SACCHTH_0:
-       case TRXC_SACCHTH_1:
-               return true;
-       default:
-               return false;
-       }
-}
-
 /* set multiframe scheduler to given pchan */
 int trx_sched_set_pchan(struct l1sched_trx *l1t, uint8_t tn,
        enum gsm_phys_chan_config pchan)
diff --git a/src/common/scheduler_mframe.c b/src/common/scheduler_mframe.c
new file mode 100644
index 0000000..ab0b5b6
--- /dev/null
+++ b/src/common/scheduler_mframe.c
@@ -0,0 +1,824 @@
+/* Scheduler for OsmoBTS-TRX */
+
+/* (C) 2013 by Andreas Eversberg <jo...@eversberg.eu>
+ * (C) 2015 by Alexander Chemeris <alexander.cheme...@fairwaves.co>
+ * (C) 2015-2017 by Harald Welte <lafo...@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdint.h>
+#include <ctype.h>
+
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/talloc.h>
+
+#include <osmo-bts/gsm_data.h>
+#include <osmo-bts/logging.h>
+#include <osmo-bts/scheduler.h>
+
+
+/*
+ * multiframe structure
+ */
+
+static const struct trx_sched_frame frame_bcch[51] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_BCCH,     0,      TRXC_RACH,      0 }, { TRXC_BCCH,       1,      
TRXC_RACH,      0 }, { TRXC_BCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_BCCH,       3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 }, { TRXC_CCCH,       1,      
TRXC_RACH,      0 }, { TRXC_CCCH,       2,      TRXC_RACH,      0 }, { 
TRXC_CCCH,       3,      TRXC_RACH,      0 },
+      {        TRXC_IDLE,      0,      TRXC_RACH,      0 },
+};
+
+static const struct trx_sched_frame frame_bcch_sdcch4[102] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      {        TRXC_FCCH,      0,      TRXC_SDCCH4_3,  0 },
+      {        TRXC_SCH,       0,      TRXC_SDCCH4_3,  1 },
+      { TRXC_BCCH,     0,      TRXC_SDCCH4_3,  2 },
+      { TRXC_BCCH,     1,      TRXC_SDCCH4_3,  3 },
+      { TRXC_BCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_BCCH,     3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_SACCH4_2,  0 },
+      { TRXC_CCCH,     1,      TRXC_SACCH4_2,  1 },
+      { TRXC_CCCH,     2,      TRXC_SACCH4_2,  2 },
+      { TRXC_CCCH,     3,      TRXC_SACCH4_2,  3 },
+      {        TRXC_FCCH,      0,      TRXC_SACCH4_3,  0 },
+      {        TRXC_SCH,       0,      TRXC_SACCH4_3,  1 },
+      { TRXC_CCCH,     0,      TRXC_SACCH4_3,  2 },
+      { TRXC_CCCH,     1,      TRXC_SACCH4_3,  3 },
+      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     1,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 3,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 3,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_3, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_3, 1,      TRXC_SDCCH4_0,  0 },
+      { TRXC_SDCCH4_3, 2,      TRXC_SDCCH4_0,  1 },
+      { TRXC_SDCCH4_3, 3,      TRXC_SDCCH4_0,  2 },
+      {        TRXC_FCCH,      0,      TRXC_SDCCH4_0,  3 },
+      {        TRXC_SCH,       0,      TRXC_SDCCH4_1,  0 },
+      { TRXC_SACCH4_0, 0,      TRXC_SDCCH4_1,  1 },
+      { TRXC_SACCH4_0, 1,      TRXC_SDCCH4_1,  2 },
+      { TRXC_SACCH4_0, 2,      TRXC_SDCCH4_1,  3 },
+      { TRXC_SACCH4_0, 3,      TRXC_RACH,      0 },
+      { TRXC_SACCH4_1, 0,      TRXC_RACH,      0 },
+      { TRXC_SACCH4_1, 1,      TRXC_SDCCH4_2,  0 },
+      { TRXC_SACCH4_1, 2,      TRXC_SDCCH4_2,  1 },
+      { TRXC_SACCH4_1, 3,      TRXC_SDCCH4_2,  2 },
+      {        TRXC_IDLE,      0,      TRXC_SDCCH4_2,  3 },
+
+      {        TRXC_FCCH,      0,      TRXC_SDCCH4_3,  0 },
+      {        TRXC_SCH,       0,      TRXC_SDCCH4_3,  1 },
+      { TRXC_BCCH,     0,      TRXC_SDCCH4_3,  2 },
+      { TRXC_BCCH,     1,      TRXC_SDCCH4_3,  3 },
+      { TRXC_BCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_BCCH,     3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_SACCH4_0,  0 },
+      { TRXC_CCCH,     1,      TRXC_SACCH4_0,  1 },
+      { TRXC_CCCH,     2,      TRXC_SACCH4_0,  2 },
+      { TRXC_CCCH,     3,      TRXC_SACCH4_0,  3 },
+      {        TRXC_FCCH,      0,      TRXC_SACCH4_1,  0 },
+      {        TRXC_SCH,       0,      TRXC_SACCH4_1,  1 },
+      { TRXC_CCCH,     0,      TRXC_SACCH4_1,  2 },
+      { TRXC_CCCH,     1,      TRXC_SACCH4_1,  3 },
+      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     0,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     1,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     2,      TRXC_RACH,      0 },
+      { TRXC_CCCH,     3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_0, 3,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_1, 3,      TRXC_RACH,      0 },
+      {        TRXC_FCCH,      0,      TRXC_RACH,      0 },
+      {        TRXC_SCH,       0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 1,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 2,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_2, 3,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_3, 0,      TRXC_RACH,      0 },
+      { TRXC_SDCCH4_3, 1,      TRXC_SDCCH4_0,  0 },
+      { TRXC_SDCCH4_3, 2,      TRXC_SDCCH4_0,  1 },
+      { TRXC_SDCCH4_3, 3,      TRXC_SDCCH4_0,  2 },
+      {        TRXC_FCCH,      0,      TRXC_SDCCH4_0,  3 },
+      {        TRXC_SCH,       0,      TRXC_SDCCH4_1,  0 },
+      { TRXC_SACCH4_2, 0,      TRXC_SDCCH4_1,  1 },
+      { TRXC_SACCH4_2, 1,      TRXC_SDCCH4_1,  2 },
+      { TRXC_SACCH4_2, 2,      TRXC_SDCCH4_1,  3 },
+      { TRXC_SACCH4_2, 3,      TRXC_RACH,      0 },
+      { TRXC_SACCH4_3, 0,      TRXC_RACH,      0 },
+      { TRXC_SACCH4_3, 1,      TRXC_SDCCH4_2,  0 },
+      { TRXC_SACCH4_3, 2,      TRXC_SDCCH4_2,  1 },
+      { TRXC_SACCH4_3, 3,      TRXC_SDCCH4_2,  2 },
+      {        TRXC_IDLE,      0,      TRXC_SDCCH4_2,  3 },
+};
+
+static const struct trx_sched_frame frame_sdcch8[102] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_SDCCH8_0, 0,      TRXC_SACCH8_5,  0 },
+      { TRXC_SDCCH8_0, 1,      TRXC_SACCH8_5,  1 },
+      { TRXC_SDCCH8_0, 2,      TRXC_SACCH8_5,  2 },
+      { TRXC_SDCCH8_0, 3,      TRXC_SACCH8_5,  3 },
+      { TRXC_SDCCH8_1, 0,      TRXC_SACCH8_6,  0 },
+      { TRXC_SDCCH8_1, 1,      TRXC_SACCH8_6,  1 },
+      { TRXC_SDCCH8_1, 2,      TRXC_SACCH8_6,  2 },
+      { TRXC_SDCCH8_1, 3,      TRXC_SACCH8_6,  3 },
+      { TRXC_SDCCH8_2, 0,      TRXC_SACCH8_7,  0 },
+      { TRXC_SDCCH8_2, 1,      TRXC_SACCH8_7,  1 },
+      { TRXC_SDCCH8_2, 2,      TRXC_SACCH8_7,  2 },
+      { TRXC_SDCCH8_2, 3,      TRXC_SACCH8_7,  3 },
+      { TRXC_SDCCH8_3, 0,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 1,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 2,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 3,      TRXC_SDCCH8_0,  0 },
+      { TRXC_SDCCH8_4, 0,      TRXC_SDCCH8_0,  1 },
+      { TRXC_SDCCH8_4, 1,      TRXC_SDCCH8_0,  2 },
+      { TRXC_SDCCH8_4, 2,      TRXC_SDCCH8_0,  3 },
+      { TRXC_SDCCH8_4, 3,      TRXC_SDCCH8_1,  0 },
+      { TRXC_SDCCH8_5, 0,      TRXC_SDCCH8_1,  1 },
+      { TRXC_SDCCH8_5, 1,      TRXC_SDCCH8_1,  2 },
+      { TRXC_SDCCH8_5, 2,      TRXC_SDCCH8_1,  3 },
+      { TRXC_SDCCH8_5, 3,      TRXC_SDCCH8_2,  0 },
+      { TRXC_SDCCH8_6, 0,      TRXC_SDCCH8_2,  1 },
+      { TRXC_SDCCH8_6, 1,      TRXC_SDCCH8_2,  2 },
+      { TRXC_SDCCH8_6, 2,      TRXC_SDCCH8_2,  3 },
+      { TRXC_SDCCH8_6, 3,      TRXC_SDCCH8_3,  0 },
+      { TRXC_SDCCH8_7, 0,      TRXC_SDCCH8_3,  1 },
+      { TRXC_SDCCH8_7, 1,      TRXC_SDCCH8_3,  2 },
+      { TRXC_SDCCH8_7, 2,      TRXC_SDCCH8_3,  3 },
+      { TRXC_SDCCH8_7, 3,      TRXC_SDCCH8_4,  0 },
+      { TRXC_SACCH8_0, 0,      TRXC_SDCCH8_4,  1 },
+      { TRXC_SACCH8_0, 1,      TRXC_SDCCH8_4,  2 },
+      { TRXC_SACCH8_0, 2,      TRXC_SDCCH8_4,  3 },
+      { TRXC_SACCH8_0, 3,      TRXC_SDCCH8_5,  0 },
+      { TRXC_SACCH8_1, 0,      TRXC_SDCCH8_5,  1 },
+      { TRXC_SACCH8_1, 1,      TRXC_SDCCH8_5,  2 },
+      { TRXC_SACCH8_1, 2,      TRXC_SDCCH8_5,  3 },
+      { TRXC_SACCH8_1, 3,      TRXC_SDCCH8_6,  0 },
+      { TRXC_SACCH8_2, 0,      TRXC_SDCCH8_6,  1 },
+      { TRXC_SACCH8_2, 1,      TRXC_SDCCH8_6,  2 },
+      { TRXC_SACCH8_2, 2,      TRXC_SDCCH8_6,  3 },
+      { TRXC_SACCH8_2, 3,      TRXC_SDCCH8_7,  0 },
+      { TRXC_SACCH8_3, 0,      TRXC_SDCCH8_7,  1 },
+      { TRXC_SACCH8_3, 1,      TRXC_SDCCH8_7,  2 },
+      { TRXC_SACCH8_3, 2,      TRXC_SDCCH8_7,  3 },
+      { TRXC_SACCH8_3, 3,      TRXC_SACCH8_0,  0 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  1 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  2 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_0,  3 },
+
+      { TRXC_SDCCH8_0, 0,      TRXC_SACCH8_1,  0 },
+      { TRXC_SDCCH8_0, 1,      TRXC_SACCH8_1,  1 },
+      { TRXC_SDCCH8_0, 2,      TRXC_SACCH8_1,  2 },
+      { TRXC_SDCCH8_0, 3,      TRXC_SACCH8_1,  3 },
+      { TRXC_SDCCH8_1, 0,      TRXC_SACCH8_2,  0 },
+      { TRXC_SDCCH8_1, 1,      TRXC_SACCH8_2,  1 },
+      { TRXC_SDCCH8_1, 2,      TRXC_SACCH8_2,  2 },
+      { TRXC_SDCCH8_1, 3,      TRXC_SACCH8_2,  3 },
+      { TRXC_SDCCH8_2, 0,      TRXC_SACCH8_3,  0 },
+      { TRXC_SDCCH8_2, 1,      TRXC_SACCH8_3,  1 },
+      { TRXC_SDCCH8_2, 2,      TRXC_SACCH8_3,  2 },
+      { TRXC_SDCCH8_2, 3,      TRXC_SACCH8_3,  3 },
+      { TRXC_SDCCH8_3, 0,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 1,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 2,      TRXC_IDLE,      0 },
+      { TRXC_SDCCH8_3, 3,      TRXC_SDCCH8_0,  0 },
+      { TRXC_SDCCH8_4, 0,      TRXC_SDCCH8_0,  1 },
+      { TRXC_SDCCH8_4, 1,      TRXC_SDCCH8_0,  2 },
+      { TRXC_SDCCH8_4, 2,      TRXC_SDCCH8_0,  3 },
+      { TRXC_SDCCH8_4, 3,      TRXC_SDCCH8_1,  0 },
+      { TRXC_SDCCH8_5, 0,      TRXC_SDCCH8_1,  1 },
+      { TRXC_SDCCH8_5, 1,      TRXC_SDCCH8_1,  2 },
+      { TRXC_SDCCH8_5, 2,      TRXC_SDCCH8_1,  3 },
+      { TRXC_SDCCH8_5, 3,      TRXC_SDCCH8_2,  0 },
+      { TRXC_SDCCH8_6, 0,      TRXC_SDCCH8_2,  1 },
+      { TRXC_SDCCH8_6, 1,      TRXC_SDCCH8_2,  2 },
+      { TRXC_SDCCH8_6, 2,      TRXC_SDCCH8_2,  3 },
+      { TRXC_SDCCH8_6, 3,      TRXC_SDCCH8_3,  0 },
+      { TRXC_SDCCH8_7, 0,      TRXC_SDCCH8_3,  1 },
+      { TRXC_SDCCH8_7, 1,      TRXC_SDCCH8_3,  2 },
+      { TRXC_SDCCH8_7, 2,      TRXC_SDCCH8_3,  3 },
+      { TRXC_SDCCH8_7, 3,      TRXC_SDCCH8_4,  0 },
+      { TRXC_SACCH8_4, 0,      TRXC_SDCCH8_4,  1 },
+      { TRXC_SACCH8_4, 1,      TRXC_SDCCH8_4,  2 },
+      { TRXC_SACCH8_4, 2,      TRXC_SDCCH8_4,  3 },
+      { TRXC_SACCH8_4, 3,      TRXC_SDCCH8_5,  0 },
+      { TRXC_SACCH8_5, 0,      TRXC_SDCCH8_5,  1 },
+      { TRXC_SACCH8_5, 1,      TRXC_SDCCH8_5,  2 },
+      { TRXC_SACCH8_5, 2,      TRXC_SDCCH8_5,  3 },
+      { TRXC_SACCH8_5, 3,      TRXC_SDCCH8_6,  0 },
+      { TRXC_SACCH8_6, 0,      TRXC_SDCCH8_6,  1 },
+      { TRXC_SACCH8_6, 1,      TRXC_SDCCH8_6,  2 },
+      { TRXC_SACCH8_6, 2,      TRXC_SDCCH8_6,  3 },
+      { TRXC_SACCH8_6, 3,      TRXC_SDCCH8_7,  0 },
+      { TRXC_SACCH8_7, 0,      TRXC_SDCCH8_7,  1 },
+      { TRXC_SACCH8_7, 1,      TRXC_SDCCH8_7,  2 },
+      { TRXC_SACCH8_7, 2,      TRXC_SDCCH8_7,  3 },
+      { TRXC_SACCH8_7, 3,      TRXC_SACCH8_4,  0 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  1 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  2 },
+      { TRXC_IDLE,     0,      TRXC_SACCH8_4,  3 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts0[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts1[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts2[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts3[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts4[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts5[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts6[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+};
+
+static const struct trx_sched_frame frame_tchf_ts7[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  1,      TRXC_SACCHTF,   1 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  2,      TRXC_SACCHTF,   2 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  3,      TRXC_SACCHTF,   3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_TCHF,     0,      TRXC_TCHF,      0 }, { TRXC_TCHF,       1,      
TRXC_TCHF,      1 }, { TRXC_TCHF,       2,      TRXC_TCHF,      2 }, { 
TRXC_TCHF,       3,      TRXC_TCHF,      3 },
+      { TRXC_SACCHTF,  0,      TRXC_SACCHTF,   0 },
+};
+
+static const struct trx_sched_frame frame_tchh_ts01[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
+};
+
+static const struct trx_sched_frame frame_tchh_ts23[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
+};
+
+static const struct trx_sched_frame frame_tchh_ts45[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
+};
+
+static const struct trx_sched_frame frame_tchh_ts67[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        1,      TRXC_SACCHTH_0, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        1,      TRXC_SACCHTH_1, 1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        2,      TRXC_SACCHTH_0, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        2,      TRXC_SACCHTH_1, 2 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        3,      TRXC_SACCHTH_0, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        3,      TRXC_SACCHTH_1, 3 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_0,        0,      TRXC_SACCHTH_0, 0 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_TCHH_0,   0,      TRXC_TCHH_0,    0 }, { TRXC_TCHH_1,     0,      
TRXC_TCHH_1,    0 }, { TRXC_TCHH_0,     1,      TRXC_TCHH_0,    1 }, { 
TRXC_TCHH_1,     1,      TRXC_TCHH_1,    1 },
+      { TRXC_SACCHTH_1,        0,      TRXC_SACCHTH_1, 0 },
+};
+
+static const struct trx_sched_frame frame_pdch[104] = {
+/*     dl_chan         dl_bid  ul_chan         ul_bid */
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PTCCH,    0,      TRXC_PTCCH,     0 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PTCCH,    1,      TRXC_PTCCH,     1 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PTCCH,    2,      TRXC_PTCCH,     2 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PTCCH,    3,      TRXC_PTCCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_PDTCH,    0,      TRXC_PDTCH,     0 }, { TRXC_PDTCH,      1,      
TRXC_PDTCH,     1 }, { TRXC_PDTCH,      2,      TRXC_PDTCH,     2 }, { 
TRXC_PDTCH,      3,      TRXC_PDTCH,     3 },
+      { TRXC_IDLE,     0,      TRXC_IDLE,      0 },
+};
+
+const struct trx_sched_multiframe trx_sched_multiframes[] = {
+       { GSM_PCHAN_NONE,               0xff,   0,      NULL,                   
"NONE"},
+       { GSM_PCHAN_CCCH,               0xff,   51,     frame_bcch,             
"BCCH+CCCH" },
+       { GSM_PCHAN_CCCH_SDCCH4,        0xff,   102,    frame_bcch_sdcch4,      
"BCCH+CCCH+SDCCH/4+SACCH/4" },
+       { GSM_PCHAN_SDCCH8_SACCH8C,     0xff,   102,    frame_sdcch8,           
"SDCCH/8+SACCH/8" },
+       { GSM_PCHAN_TCH_F,              0x01,   104,    frame_tchf_ts0,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x02,   104,    frame_tchf_ts1,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x04,   104,    frame_tchf_ts2,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x08,   104,    frame_tchf_ts3,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x10,   104,    frame_tchf_ts4,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x20,   104,    frame_tchf_ts5,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x40,   104,    frame_tchf_ts6,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_F,              0x80,   104,    frame_tchf_ts7,         
"TCH/F+SACCH" },
+       { GSM_PCHAN_TCH_H,              0x03,   104,    frame_tchh_ts01,        
"TCH/H+SACCH" },
+       { GSM_PCHAN_TCH_H,              0x0c,   104,    frame_tchh_ts23,        
"TCH/H+SACCH" },
+       { GSM_PCHAN_TCH_H,              0x30,   104,    frame_tchh_ts45,        
"TCH/H+SACCH" },
+       { GSM_PCHAN_TCH_H,              0xc0,   104,    frame_tchh_ts67,        
"TCH/H+SACCH" },
+       { GSM_PCHAN_PDCH,               0xff,   104,    frame_pdch,             
"PDCH" },
+};
+
+
+/*
+ * scheduler functions
+ */
+
+int find_sched_mframe_idx(enum gsm_phys_chan_config pchan, uint8_t tn)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(trx_sched_multiframes); i++) {
+               if (trx_sched_multiframes[i].pchan == pchan
+                && (trx_sched_multiframes[i].slotmask & (1 << tn))) {
+                       return i;
+               }
+       }
+       return -1;
+}
+
+/* Determine if given frame number contains SACCH (true) or other (false) 
burst */
+bool trx_sched_is_sacch_fn(struct gsm_bts_trx_ts *ts, uint32_t fn, bool uplink)
+{
+       int i;
+       const struct trx_sched_multiframe *sched;
+       const struct trx_sched_frame *frame;
+       enum trx_chan_type ch_type;
+
+       i = find_sched_mframe_idx(ts->pchan, ts->nr);
+       if (i < 0)
+               return -EINVAL;
+       sched = &trx_sched_multiframes[i];
+       frame = &sched->frames[fn % sched->period];
+       if (uplink)
+               ch_type = frame->ul_chan;
+       else
+               ch_type = frame->dl_chan;
+
+       switch (ch_type) {
+       case TRXC_SACCH4_0:
+       case TRXC_SACCH4_1:
+       case TRXC_SACCH4_2:
+       case TRXC_SACCH4_3:
+       case TRXC_SACCH8_0:
+       case TRXC_SACCH8_1:
+       case TRXC_SACCH8_2:
+       case TRXC_SACCH8_3:
+       case TRXC_SACCH8_4:
+       case TRXC_SACCH8_5:
+       case TRXC_SACCH8_6:
+       case TRXC_SACCH8_7:
+       case TRXC_SACCHTF:
+       case TRXC_SACCHTH_0:
+       case TRXC_SACCHTH_1:
+               return true;
+       default:
+               return false;
+       }
+}
diff --git a/src/osmo-bts-trx/Makefile.am b/src/osmo-bts-trx/Makefile.am
index 5fe7705..c241232 100644
--- a/src/osmo-bts-trx/Makefile.am
+++ b/src/osmo-bts-trx/Makefile.am
@@ -7,5 +7,5 @@
 bin_PROGRAMS = osmo-bts-trx
 
 osmo_bts_trx_SOURCES = main.c trx_if.c l1_if.c scheduler_trx.c trx_vty.c 
loops.c
-osmo_bts_trx_LDADD = $(top_builddir)/src/common/libbts.a 
$(top_builddir)/src/common/libl1sched.a $(LDADD)
+osmo_bts_trx_LDADD = $(top_builddir)/src/common/libl1sched.a 
$(top_builddir)/src/common/libbts.a $(LDADD)
 
diff --git a/src/osmo-bts-virtual/Makefile.am b/src/osmo-bts-virtual/Makefile.am
index 6038426..eeb76aa 100644
--- a/src/osmo-bts-virtual/Makefile.am
+++ b/src/osmo-bts-virtual/Makefile.am
@@ -7,4 +7,4 @@
 bin_PROGRAMS = osmo-bts-virtual
 
 osmo_bts_virtual_SOURCES = main.c bts_model.c virtualbts_vty.c 
scheduler_virtbts.c l1_if.c virtual_um.c osmo_mcast_sock.c
-osmo_bts_virtual_LDADD = $(top_builddir)/src/common/libbts.a 
$(top_builddir)/src/common/libl1sched.a $(COMMON_LDADD)
+osmo_bts_virtual_LDADD = $(top_builddir)/src/common/libl1sched.a 
$(top_builddir)/src/common/libbts.a $(COMMON_LDADD)

-- 
To view, visit https://gerrit.osmocom.org/6852
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6a501e66c47809ae3cdc55bef2cb6390ee0096b1
Gerrit-PatchSet: 5
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <lafo...@gnumonks.org>
Gerrit-Reviewer: Harald Welte <lafo...@gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Vadim Yanitskiy <axilira...@gmail.com>

Reply via email to