aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmo-bts/phy_link.h1
-rw-r--r--src/osmo-bts-octphy/l1_oml.c8
-rw-r--r--src/osmo-bts-octphy/octphy_vty.c28
3 files changed, 30 insertions, 7 deletions
diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h
index 6b2f21ea..1f8450b8 100644
--- a/include/osmo-bts/phy_link.h
+++ b/include/osmo-bts/phy_link.h
@@ -63,6 +63,7 @@ struct phy_link {
/* configuration */
uint32_t rf_port_index;
uint32_t rx_gain_db;
+ bool tx_atten_flag;
uint32_t tx_atten_db;
#if OCTPHY_MULTI_TRX == 1
/* arfcn used by TRX with id 0 */
diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c
index 58656256..da8ff03a 100644
--- a/src/osmo-bts-octphy/l1_oml.c
+++ b/src/osmo-bts-octphy/l1_oml.c
@@ -1373,7 +1373,13 @@ int l1if_trx_open(struct gsm_bts_trx *trx)
oc->Config.usTsc = trx->bts->bsic & 0x7;
oc->RfConfig.ulRxGainDb = plink->u.octphy.rx_gain_db;
/* FIXME: compute this based on nominal transmit power, etc. */
- oc->RfConfig.ulTxAttndB = plink->u.octphy.tx_atten_db;
+ if (plink->u.octphy.tx_atten_flag) {
+ oc->RfConfig.ulTxAttndB = plink->u.octphy.tx_atten_db;
+ } else {
+ /* Take the Tx Attn received in set radio attribures
+ * x4 is for the value in db */
+ oc->RfConfig.ulTxAttndB = (trx->max_power_red) << 2;
+ }
#if OCTPHY_MULTI_TRX == 1
LOGP(DL1C, LOGL_INFO, "Tx TRX-OPEN.req(trx=%u, rf_port=%u, arfcn=%u, "
diff --git a/src/osmo-bts-octphy/octphy_vty.c b/src/osmo-bts-octphy/octphy_vty.c
index 3ea576cb..e134fc59 100644
--- a/src/osmo-bts-octphy/octphy_vty.c
+++ b/src/osmo-bts-octphy/octphy_vty.c
@@ -136,10 +136,16 @@ DEFUN(cfg_phy_rx_gain_db, cfg_phy_rx_gain_db_cmd,
}
DEFUN(cfg_phy_tx_atten_db, cfg_phy_tx_atten_db_cmd,
- "octphy tx-attenuation <0-359>",
- OCT_STR "Configure the Tx Attenuation in quarter-dB\n"
- "Tx attenuation in quarter-dB\n")
+ "octphy tx-attenuation (oml|<0-359>)",
+ OCT_STR "Set attenuation on transmitted RF\n"
+ "Use tx-attenuation according to OML instructions from BSC\n"
+ "Fixed tx-attenuation in quarter-dB\n")
{
+
+
+
+
+
struct phy_link *plink = vty->index;
if (plink->state != PHY_LINK_SHUTDOWN) {
@@ -148,7 +154,12 @@ DEFUN(cfg_phy_tx_atten_db, cfg_phy_tx_atten_db_cmd,
return CMD_WARNING;
}
- plink->u.octphy.tx_atten_db = atoi(argv[0]);
+ if (strcmp(argv[0], "oml") == 0) {
+ plink->u.octphy.tx_atten_flag = false;
+ } else {
+ plink->u.octphy.tx_atten_db = atoi(argv[0]);
+ plink->u.octphy.tx_atten_flag = true;
+ }
return CMD_SUCCESS;
}
@@ -202,8 +213,13 @@ void bts_model_config_write_phy(struct vty *vty, struct phy_link *plink)
VTY_NEWLINE);
vty_out(vty, " rx-gain %u%s", plink->u.octphy.rx_gain_db,
VTY_NEWLINE);
- vty_out(vty, " tx-attenuation %u%s", plink->u.octphy.tx_atten_db,
- VTY_NEWLINE);
+
+ if (plink->u.octphy.tx_atten_flag) {
+ vty_out(vty, " tx-attenuation %u%s",
+ plink->u.octphy.tx_atten_db, VTY_NEWLINE);
+ } else
+ vty_out(vty, " tx-attenuation oml%s", VTY_NEWLINE);
+
vty_out(vty, " rf-port-index %u%s", plink->u.octphy.rf_port_index,
VTY_NEWLINE);
}