aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac7
-rw-r--r--include/osmo-bts/phy_link.h4
-rw-r--r--src/osmo-bts-octphy/l1_oml.c5
-rw-r--r--src/osmo-bts-octphy/octphy_vty.c48
4 files changed, 64 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index cbfbf125..a03b2dd1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -112,6 +112,13 @@ if test "$enable_octphy" = "yes" ; then
[],
[#include <octphy/octvc1/hw/octvc1_hw_api.h>])
+ AC_CHECK_MEMBER([tOCTVC1_GSM_RF_CONFIG.ulTxAntennaId],
+ AC_DEFINE([OCTPHY_USE_ANTENNA_ID],
+ [1],
+ [Define to 1 if your octphy header files support antenna ids in tOCTVC1_GSM_RF_CONFIG]),
+ [],
+ [#include <octphy/octvc1/gsm/octvc1_gsm_api.h>])
+
CPPFLAGS=$oldCPPFLAGS
fi
diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h
index e644a910..e8fd7eb7 100644
--- a/include/osmo-bts/phy_link.h
+++ b/include/osmo-bts/phy_link.h
@@ -53,6 +53,10 @@ struct phy_link {
/* configuration */
uint32_t rf_port_index;
+#if OCTPHY_USE_ANTENNA_ID == 1
+ uint32_t rx_ant_id;
+ uint32_t tx_ant_id;
+#endif
uint32_t rx_gain_db;
bool tx_atten_flag;
uint32_t tx_atten_db;
diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c
index 0cd25f25..c70b45fd 100644
--- a/src/osmo-bts-octphy/l1_oml.c
+++ b/src/osmo-bts-octphy/l1_oml.c
@@ -1394,6 +1394,11 @@ int l1if_trx_open(struct gsm_bts_trx *trx)
oc->RfConfig.ulTxAttndB = (trx->max_power_red) << 2;
}
+#if OCTPHY_USE_ANTENNA_ID == 1
+ oc->RfConfig.ulTxAntennaId = plink->u.octphy.tx_ant_id;
+ oc->RfConfig.ulRxAntennaId = plink->u.octphy.rx_ant_id;
+#endif
+
#if OCTPHY_MULTI_TRX == 1
LOGP(DL1C, LOGL_INFO, "Tx TRX-OPEN.req(trx=%u, rf_port=%u, arfcn=%u, "
"center=%u, tsc=%u, rx_gain=%u, tx_atten=%u)\n",
diff --git a/src/osmo-bts-octphy/octphy_vty.c b/src/osmo-bts-octphy/octphy_vty.c
index 370aff6d..fb36493f 100644
--- a/src/osmo-bts-octphy/octphy_vty.c
+++ b/src/osmo-bts-octphy/octphy_vty.c
@@ -117,6 +117,42 @@ DEFUN(cfg_phy_rf_port_idx, cfg_phy_rf_port_idx_cmd,
return CMD_SUCCESS;
}
+#if OCTPHY_USE_ANTENNA_ID == 1
+DEFUN(cfg_phy_rx_ant_id, cfg_phy_rx_ant_id_cmd,
+ "octphy rx-ant-id <0-1>",
+ OCT_STR "Configure the RX Antenna for this TRX\n" "RX Antenna Id\n")
+{
+ struct phy_link *plink = vty->index;
+
+ if (plink->state != PHY_LINK_SHUTDOWN) {
+ vty_out(vty, "Can only reconfigure a PHY link that is down%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ plink->u.octphy.rx_ant_id = atoi(argv[0]);
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(cfg_phy_tx_ant_id, cfg_phy_tx_ant_id_cmd,
+ "octphy tx-ant-id <0-1>",
+ OCT_STR "Configure the TX Antenna for this TRX\n" "TX Antenna Id\n")
+{
+ struct phy_link *plink = vty->index;
+
+ if (plink->state != PHY_LINK_SHUTDOWN) {
+ vty_out(vty, "Can only reconfigure a PHY link that is down%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ plink->u.octphy.tx_ant_id = atoi(argv[0]);
+
+ return CMD_SUCCESS;
+}
+#endif
+
DEFUN(cfg_phy_rx_gain_db, cfg_phy_rx_gain_db_cmd,
"octphy rx-gain <0-73>",
OCT_STR "Configure the Rx Gain in dB\n"
@@ -300,6 +336,14 @@ void bts_model_config_write_phy(struct vty *vty, struct phy_link *plink)
vty_out(vty, " octphy rf-port-index %u%s", plink->u.octphy.rf_port_index,
VTY_NEWLINE);
+
+#if OCTPHY_USE_ANTENNA_ID == 1
+ vty_out(vty, " octphy tx-ant-id %u%s", plink->u.octphy.tx_ant_id,
+ VTY_NEWLINE);
+
+ vty_out(vty, " octphy rx-ant-id %u%s", plink->u.octphy.rx_ant_id,
+ VTY_NEWLINE);
+#endif
}
void bts_model_config_write_phy_inst(struct vty *vty, struct phy_instance *pinst)
@@ -347,6 +391,10 @@ int bts_model_vty_init(struct gsm_bts *bts)
install_element(PHY_NODE, &cfg_phy_hwaddr_cmd);
install_element(PHY_NODE, &cfg_phy_netdev_cmd);
install_element(PHY_NODE, &cfg_phy_rf_port_idx_cmd);
+#if OCTPHY_USE_ANTENNA_ID == 1
+ install_element(PHY_NODE, &cfg_phy_rx_ant_id_cmd);
+ install_element(PHY_NODE, &cfg_phy_tx_ant_id_cmd);
+#endif
install_element(PHY_NODE, &cfg_phy_rx_gain_db_cmd);
install_element(PHY_NODE, &cfg_phy_tx_atten_db_cmd);