From 4ee4d6be2a66a151de0fc0ef258d89fad4135a91 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Wed, 4 Nov 2020 13:31:41 +0000 Subject: part 4 of: fix SAPIs for handover, osmo-bts-lc15 Change-Id: I2ac6b0d498edb8facfac4feea7fccbba725d16e8 --- src/osmo-bts-lc15/oml.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/osmo-bts-lc15/oml.c b/src/osmo-bts-lc15/oml.c index 70be4191..dee5feb7 100644 --- a/src/osmo-bts-lc15/oml.c +++ b/src/osmo-bts-lc15/oml.c @@ -655,10 +655,6 @@ static const struct sapi_dir pdtch_sapis[] = { #endif }; -static const struct sapi_dir ho_sapis[] = { - { GsmL1_Sapi_Rach, GsmL1_Dir_RxUplink }, -}; - struct lchan_sapis { const struct sapi_dir *sapis; unsigned int num_sapis; @@ -691,11 +687,6 @@ static const struct lchan_sapis sapis_for_lchan[_GSM_LCHAN_MAX] = { }, }; -static const struct lchan_sapis sapis_for_ho = { - .sapis = ho_sapis, - .num_sapis = ARRAY_SIZE(ho_sapis), -}; - static int mph_send_activate_req(struct gsm_lchan *lchan, struct sapi_cmd *cmd); static int mph_send_deactivate_req(struct gsm_lchan *lchan, struct sapi_cmd *cmd); static int mph_send_config_ciphering(struct gsm_lchan *lchan, struct sapi_cmd *cmd); @@ -1168,10 +1159,10 @@ int lchan_activate(struct gsm_lchan *lchan) "%s Trying to activate lchan, but commands in queue\n", gsm_lchan_name(lchan)); - /* override the regular SAPIs if this is the first hand-over - * related activation of the LCHAN */ + /* For handover, always start the main channel immediately. lchan->want_dl_sacch_active indicates whether dl + * SACCH should be activated. Also, for HO, start the RACH SAPI. */ if (lchan->ho.active == HANDOVER_ENABLED) - s4l = &sapis_for_ho; + enqueue_sapi_act_cmd(lchan, GsmL1_Sapi_Rach, GsmL1_Dir_RxUplink); for (i = 0; i < s4l->num_sapis; i++) { int sapi = s4l->sapis[i].sapi; @@ -1184,6 +1175,12 @@ int lchan_activate(struct gsm_lchan *lchan) fl1h->alive_prim_cnt = 0; osmo_timer_schedule(&fl1h->alive_timer, 5, 0); } + + /* For handover, possibly postpone activating the dl SACCH until the HO RACH is received. */ + if (sapi == GsmL1_Sapi_Sacch && dir == GsmL1_Dir_TxDownlink + && !lchan->want_dl_sacch_active) + continue; + enqueue_sapi_act_cmd(lchan, sapi, dir); } @@ -1996,12 +1993,9 @@ int l1if_rsl_chan_mod(struct gsm_lchan *lchan) /* Give up listening to RACH bursts */ release_sapi_ul_rach(lchan); - /* Activate the normal SAPIs */ - for (i = 0; i < s4l->num_sapis; i++) { - int sapi = s4l->sapis[i].sapi; - int dir = s4l->sapis[i].dir; - enqueue_sapi_act_cmd(lchan, sapi, dir); - } + /* All the normal SAPIs have already been activated, only DL SACCH may still be missing. */ + if (lchan->want_dl_sacch_active) + enqueue_sapi_act_cmd(lchan, GsmL1_Sapi_Sacch, GsmL1_Dir_TxDownlink); return 0; } -- cgit v1.2.3