aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp <pmaier@sysmocom.de>2016-10-05 13:52:00 +0200
committerHarald Welte <laforge@gnumonks.org>2016-10-06 09:48:02 +0000
commitf5494e84e898f947190466d30d5f932bac0fadf9 (patch)
tree160c17dbdc99beb9fc2980330a91e8c5bf589d45
parent3f192f229170b3f0359b03e3fafbcf80a21c6001 (diff)
octphy: reintroducing multi-trx support
The multi-trx had to be removed because of build conflicts with octphy header that lack the struct members for needed to support multi-trx. For details see the following revert-commits: ed6b48e4a5fba07c3ecccf689991799ae13a2aaa c9a1f284acf518cb4e62c3898e20398ed53807c3 This commit reintroduces multi trx support and ads an ifdef decision to ensure that header files without multi-trx support still work. Change-Id: I7f9b2906cc149c817183745b4c96bcc7f9ebdad0
-rw-r--r--configure.ac1
-rw-r--r--include/osmo-bts/phy_link.h5
-rw-r--r--src/osmo-bts-octphy/l1_oml.c20
3 files changed, 25 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index d35a52a0..1e8a4ec0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -70,6 +70,7 @@ AC_SUBST([OCTSDR2G_INCDIR], $octsdr2g_incdir)
AC_MSG_RESULT([$enable_octphy])
AM_CONDITIONAL(ENABLE_OCTPHY, test "x$enable_octphy" = "xyes")
if test "$enable_octphy" = "yes" ; then
+ AC_CHECK_MEMBER([tOCTVC1_GSM_TRX_CONFIG.usCentreArfcn], AC_DEFINE([OCTPHY_MULTI_TRX], [1], [Define to 1 if your octphy header files support multi-trx]), [], [[#include <octphy/octvc1/gsm/octvc1_gsm_api.h>]])
oldCPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS -I$OCTSDR2G_INCDIR -I$srcdir/include $LIBOSMOCORE_CFLAGS"
AC_CHECK_HEADER([octphy/octvc1/gsm/octvc1_gsm_default.h],[],
diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h
index ea0fb336..6b2f21ea 100644
--- a/include/osmo-bts/phy_link.h
+++ b/include/osmo-bts/phy_link.h
@@ -7,6 +7,7 @@
#include <osmo-bts/scheduler.h>
#include <linux/if_packet.h>
+#include "btsconfig.h"
struct gsm_bts_trx;
@@ -63,6 +64,10 @@ struct phy_link {
uint32_t rf_port_index;
uint32_t rx_gain_db;
uint32_t tx_atten_db;
+#if OCTPHY_MULTI_TRX == 1
+ /* arfcn used by TRX with id 0 */
+ uint16_t center_arfcn;
+#endif
struct octphy_hdl *hdl;
} octphy;
diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c
index 77352612..1b74fd40 100644
--- a/src/osmo-bts-octphy/l1_oml.c
+++ b/src/osmo-bts-octphy/l1_oml.c
@@ -43,6 +43,7 @@
#include "l1_oml.h"
#include "l1_utils.h"
#include "octphy_hw_api.h"
+#include "btsconfig.h"
#include <octphy/octvc1/octvc1_rc2string.h>
#include <octphy/octvc1/gsm/octvc1_gsm_api_swap.h>
@@ -1345,17 +1346,34 @@ int l1if_trx_open(struct gsm_bts_trx *trx)
oc->TrxId.byTrxId = pinst->u.octphy.trx_id;
oc->Config.ulBand = osmocom_to_octphy_band(trx->bts->band, trx->arfcn);
oc->Config.usArfcn = trx->arfcn;
- oc->Config.usTsc = trx->bts->bsic & 0x7;
+
+#if OCTPHY_MULTI_TRX == 1
+ if (pinst->u.octphy.trx_id)
+ oc->Config.usCentreArfcn = plink->u.octphy.center_arfcn;
+ else {
+ oc->Config.usCentreArfcn = trx->arfcn;
+ plink->u.octphy.center_arfcn = trx->arfcn;
+ }
oc->Config.usBcchArfcn = trx->bts->c0->arfcn;
+#endif
+ 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 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",
+ oc->TrxId.byTrxId, oc->ulRfPortIndex, oc->Config.usArfcn,
+ oc->Config.usCentreArfcn, oc->Config.usTsc, oc->RfConfig.ulRxGainDb,
+ oc->RfConfig.ulTxAttndB);
+#else
LOGP(DL1C, LOGL_INFO, "Tx TRX-OPEN.req(trx=%u, rf_port=%u, arfcn=%u, "
"tsc=%u, rx_gain=%u, tx_atten=%u)\n",
oc->TrxId.byTrxId, oc->ulRfPortIndex, oc->Config.usArfcn,
oc->Config.usTsc, oc->RfConfig.ulRxGainDb,
oc->RfConfig.ulTxAttndB);
+#endif
mOCTVC1_GSM_MSG_TRX_OPEN_CMD_SWAP(oc);