This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bts/+/19827 ) Change subject: bts-trx: Use TRXC RFMUTE instead of resetting the scheduler ...................................................................... bts-trx: Use TRXC RFMUTE instead of resetting the scheduler Since commit 221ee92551a3d34c4f61e99e5bf4aa718c4d6f88, bts_model_trx_deact_rf() was being called when RF locking the TRX, which was implemented by resetting the scheduler. This proved to be a messy and wrong way to emulate disabling RF, since it modifies tate on lots of structures from which it is later difficult to recover from, causing bugs and issues like: 82a35a1dbff849ecf16b7c70de4c1c7786704b2e be15a12c87983ef07fb133fedea4ef18d2213bc6 eef420d1ca2144682d3de3f4e5cc4a7458276a03 https://osmocom.org/issues/4694 https://osmocom.org/issues/4695 https://osmocom.org/issues/4696 https://osmocom.org/issues/4697 So for all these reasons, it is believed a good solution to avoid resetting the scheduler and simply ask lower layers (osmo-trx) to take care of disabling RF TX/RX on a given TRX. For TRX implementations not supporting the newly added RFMUTE command, ramping down to -10dBm still provides for a way to emulate RF locking. In any case, none of this was supported until recently so it's not like we are breaking some feature here. Related: SYS#4920 Change-Id: I1423ddb390ef327ec7d4a27de2ac5dca663773a5 --- M src/osmo-bts-trx/l1_if.c M src/osmo-bts-trx/trx_if.c M src/osmo-bts-trx/trx_if.h 3 files changed, 19 insertions(+), 40 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c index 430d97e..bc0df2b 100644 --- a/src/osmo-bts-trx/l1_if.c +++ b/src/osmo-bts-trx/l1_if.c @@ -215,18 +215,8 @@ { struct phy_instance *pinst = trx_phy_instance(trx); struct trx_l1h *l1h = pinst->u.osmotrx.hdl; - enum gsm_phys_chan_config pchan = trx->ts[0].pchan; - /* close all logical channels and reset timeslots */ - trx_sched_reset(&l1h->l1s); - - /* deactivate lchan for CCCH */ - if (pchan == GSM_PCHAN_CCCH || pchan == GSM_PCHAN_CCCH_SDCCH4 || - pchan == GSM_PCHAN_CCCH_SDCCH4_CBCH) { - lchan_set_state(&trx->ts[0].lchan[CCCH_LCHAN], LCHAN_S_INACTIVE); - } - - return 0; + return trx_if_cmd_rfmute(l1h, true); } /* deactivate transceiver */ @@ -651,12 +641,14 @@ { struct gsm_bts_trx *trx; struct phy_instance *pinst; - int i, rc = 0; + struct trx_l1h *l1h; + int rc = 0; switch (mo->obj_class) { case NM_OC_RADIO_CARRIER: trx = (struct gsm_bts_trx *) obj; pinst = trx_phy_instance(trx); + l1h = pinst->u.osmotrx.hdl; /* Begin to ramp the power if TRX is already running. Otherwise * skip, power ramping will be started after TRX is running */ @@ -670,20 +662,18 @@ if (mo->nm_state.administrative == NM_STATE_LOCKED && adm_state == NM_STATE_UNLOCKED) { /* Previous change was UNLOCKED->LOCKED, so we - * were ramping down and we didn't deactivate + * were ramping down and we didn't mute RF * yet, so now simply skip old ramp down compl - * cb, skip TS activation and go for ramp up + * cb, skip RF unmute and go for ramp up * directly. */ goto ramp_up; } else if (mo->nm_state.administrative == NM_STATE_UNLOCKED && adm_state == NM_STATE_LOCKED) { - /* Previous change was LOCKED->UNLOCKED, which - * means TS were also enabled during start of - * ramping up. So we simply need to skip - * ramping up and start ramping down instead, - * disabling TS at the end as usual. Fall - * through usual procedure below. - */ + /* Previous change was LOCKED->UNLOCKED, so we + * simply need to skip ramping up and start + * ramping down instead, muting RF at the + * end as usual. Fall through usual procedure + * below. */ } else if (mo->nm_state.administrative == adm_state) { OSMO_ASSERT(0); } @@ -695,25 +685,7 @@ break; case NM_STATE_UNLOCKED: mo->procedure_pending = 1; - /* Activate timeslots in scheduler and start power ramp up */ - for (i = 0; i < ARRAY_SIZE(trx->ts); i++) { - struct gsm_bts_trx_ts *ts = &trx->ts[i]; - if (ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH) { - /* dyn.pchan_is is set to GSM_PCHAN_NONE when - * internally deactivated during locking. Simply - * internally restore the old status here. - */ - ts->dyn.pchan_is = ts->dyn.pchan_want; - } else if (ts->pchan == GSM_PCHAN_TCH_F_PDCH && ts->flags & TS_F_PDCH_PENDING_MASK) { - /* TS configuration already in progress, - * waiting for PCU response, let it be - * de/activated later by PCU ACT CNF as a - * response to pcu_tx_info_ind() - */ - continue; - } - trx_set_ts(ts); - } + trx_if_cmd_rfmute(l1h, false); ramp_up: rc = l1if_trx_start_power_ramp(trx, bts_model_chg_adm_state_ramp_compl_cb); if (rc == 0) { diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c index 875487a..05167ca 100644 --- a/src/osmo-bts-trx/trx_if.c +++ b/src/osmo-bts-trx/trx_if.c @@ -376,6 +376,12 @@ return trx_ctrl_cmd(l1h, 1, "NOHANDOVER", "%d %d", tn, ss); } +/*! Send "RFMUTE" command to TRX: Mute or Unmute RF transmission */ +int trx_if_cmd_rfmute(struct trx_l1h *l1h, bool mute) +{ + return trx_ctrl_cmd(l1h, 0, "RFMUTE", mute ? "1" : "0"); +} + struct trx_ctrl_rsp { char cmd[50]; char params[100]; diff --git a/src/osmo-bts-trx/trx_if.h b/src/osmo-bts-trx/trx_if.h index 6b417cf..17bc7db 100644 --- a/src/osmo-bts-trx/trx_if.h +++ b/src/osmo-bts-trx/trx_if.h @@ -35,6 +35,7 @@ int trx_if_cmd_txtune(struct trx_l1h *l1h, uint16_t arfcn, trx_if_cmd_generic_cb *cb); int trx_if_cmd_handover(struct trx_l1h *l1h, uint8_t tn, uint8_t ss); int trx_if_cmd_nohandover(struct trx_l1h *l1h, uint8_t tn, uint8_t ss); +int trx_if_cmd_rfmute(struct trx_l1h *l1h, bool mute); int trx_if_send_burst(struct trx_l1h *l1h, const struct trx_dl_burst_req *br); int trx_if_powered(struct trx_l1h *l1h); -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/19827 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I1423ddb390ef327ec7d4a27de2ac5dca663773a5 Gerrit-Change-Number: 19827 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de> Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-Reviewer: pespin <pespin at sysmocom.de> Gerrit-CC: Hoernchen <ewild at sysmocom.de> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200907/beb49c95/attachment.htm>