fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-bsc/+/32558 )
Change subject: bts: st_op_enabled_on_enter(): resume C0 power reduction
......................................................................
bts: st_op_enabled_on_enter(): resume C0 power reduction
If power saving is enabled for a BTS, it should remain enabled even
if the BTS is restarted for whatever reason. This persistence can be
achieved by re-sending the configured power reduction value whenever
the BTS NM FSM enters the ENABLED state again (i.e. reconnects).
Separate gsm_bts_send_c0_power_red() from gsm_bts_set_c0_power_red()
and call the former from st_op_enabled_on_enter(). All we need to do
is to send the value that was configured before, per-timeslot power
reduction limits remain and need not to be updated.
Take a chance to move logging from BTS specific to the generic code.
Change-Id: Ic3f8a2ab0ffd049a8ed84361a3a588c1e1b23ac6
Related: SYS#6435
(cherry picked from commit 16922c5017faf8efa9bbb840aa564a979019a172)
---
M include/osmocom/bsc/bts.h
M src/osmo-bsc/bts.c
M src/osmo-bsc/bts_osmobts.c
M src/osmo-bsc/nm_bts_fsm.c
4 files changed, 46 insertions(+), 10 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/58/32558/1
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index 12becf4..b1aaa6f 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -814,6 +814,7 @@
int gsm_bts_set_system_infos(struct gsm_bts *bts);
+int gsm_bts_send_c0_power_red(const struct gsm_bts *bts, const uint8_t red);
int gsm_bts_set_c0_power_red(struct gsm_bts *bts, const uint8_t red);
void gsm_bts_stats_reset(struct gsm_bts *bts);
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 58a4a0b..585eb99 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -975,21 +975,30 @@
return 0;
}
+/* Send the given C0 power reduction value to the BTS */
+int gsm_bts_send_c0_power_red(const struct gsm_bts *bts, const uint8_t red)
+{
+ if (!osmo_bts_has_feature(&bts->features, BTS_FEAT_BCCH_POWER_RED))
+ return -ENOTSUP;
+ if (bts->model->power_ctrl_send_c0_power_red == NULL)
+ return -ENOTSUP;
+ return bts->model->power_ctrl_send_c0_power_red(bts, red);
+}
+
+/* Send the given C0 power reduction value to the BTS and update the internal state */
int gsm_bts_set_c0_power_red(struct gsm_bts *bts, const uint8_t red)
{
struct gsm_bts_trx *c0 = bts->c0;
unsigned int tn;
int rc;
- if (!osmo_bts_has_feature(&bts->features, BTS_FEAT_BCCH_POWER_RED))
- return -ENOTSUP;
- if (bts->model->power_ctrl_send_c0_power_red == NULL)
- return -ENOTSUP;
-
- rc = bts->model->power_ctrl_send_c0_power_red(bts, red);
+ rc = gsm_bts_send_c0_power_red(bts, red);
if (rc != 0)
return rc;
+ LOG_BTS(bts, DRSL, LOGL_NOTICE, "%sabling BCCH carrier power reduction "
+ "operation mode (maximum %u dB)\n", red ? "En" : "Dis",
red);
+
/* Timeslot 0 is always transmitting BCCH/CCCH */
c0->ts[0].c0_max_power_red_db = 0;
diff --git a/src/osmo-bsc/bts_osmobts.c b/src/osmo-bsc/bts_osmobts.c
index 5f6f86f..ea0405b 100644
--- a/src/osmo-bsc/bts_osmobts.c
+++ b/src/osmo-bsc/bts_osmobts.c
@@ -168,10 +168,6 @@
if (msg == NULL)
return -ENOMEM;
- LOGP(DRSL, LOGL_NOTICE, "%sabling BCCH carrier power reduction "
- "operation mode for BTS%u (maximum %u dB)\n",
- red ? "En" : "Dis", bts->nr, red);
-
/* Abuse the standard BS POWER CONTROL message by specifying 'Common Channel'
* in the Protocol Discriminator field and 'BCCH' in the Channel Number IE. */
dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));
diff --git a/src/osmo-bsc/nm_bts_fsm.c b/src/osmo-bsc/nm_bts_fsm.c
index 92728dc..ea9fa5c 100644
--- a/src/osmo-bsc/nm_bts_fsm.c
+++ b/src/osmo-bsc/nm_bts_fsm.c
@@ -286,6 +286,13 @@
bts->mo.get_attr_rep_received = false;
bts->mo.set_attr_sent = false;
bts->mo.set_attr_ack_received = false;
+
+ /* Resume power saving on the BCCH carrier, if was enabled */
+ if (bts->c0_max_power_red_db > 0) {
+ LOG_BTS(bts, DRSL, LOGL_NOTICE, "Resuming BCCH carrier power reduction "
+ "operation mode (maximum %u dB)\n", bts->c0_max_power_red_db);
+ gsm_bts_send_c0_power_red(bts, bts->c0_max_power_red_db);
+ }
}
static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data)
--
To view, visit
https://gerrit.osmocom.org/c/osmo-bsc/+/32558
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: 2023q1
Gerrit-Change-Id: Ic3f8a2ab0ffd049a8ed84361a3a588c1e1b23ac6
Gerrit-Change-Number: 32558
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: newchange