<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/15615">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts-trx: Move transceiver_available as part of bts-trx private data<br><br>Change-Id: I35f4697bd33dbe8a4c76c9500b82c16589c701d4<br>---<br>M src/osmo-bts-trx/l1_if.c<br>M src/osmo-bts-trx/l1_if.h<br>M src/osmo-bts-trx/scheduler_trx.c<br>M src/osmo-bts-trx/trx_if.c<br>M src/osmo-bts-trx/trx_if.h<br>M src/osmo-bts-trx/trx_vty.c<br>6 files changed, 37 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/15/15615/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c</span><br><span>index cd2a03c..fb75116 100644</span><br><span>--- a/src/osmo-bts-trx/l1_if.c</span><br><span>+++ b/src/osmo-bts-trx/l1_if.c</span><br><span>@@ -186,11 +186,28 @@</span><br><span> int l1if_provision_transceiver_trx(struct trx_l1h *l1h)</span><br><span> {</span><br><span>      uint8_t tn;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct phy_link *plink;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gsm_bts *bts;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct bts_trx_priv *bts_trx;</span><br><span>        struct phy_instance *pinst = l1h->phy_inst;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct phy_link *plink = pinst->phy_link;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (!transceiver_available)</span><br><span style="color: hsl(120, 100%, 40%);">+   /* During setup, pinst may still not be associated to a TRX nr */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!pinst->trx) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPPHI(pinst, DL1C, LOGL_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+                       "Delaying provision, TRX not yet assigned to phy instance\n");</span><br><span>             return -EIO;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bts = pinst->trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!bts_trx->available) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPPHI(pinst, DL1C, LOGL_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+                       "Delaying provision, TRX not yet available\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             return -EIO;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   plink = pinst->phy_link;</span><br><span> </span><br><span>      if (l1h->config.poweron</span><br><span>    && l1h->config.tsc_valid</span><br><span>@@ -371,6 +388,7 @@</span><br><span> /* set bts attributes */</span><br><span> static uint8_t trx_set_bts(struct gsm_bts *bts, struct tlv_parsed *new_attr)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+   struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span>    struct gsm_bts_trx *trx;</span><br><span>     uint8_t bsic = bts->bsic;</span><br><span> </span><br><span>@@ -384,7 +402,7 @@</span><br><span>                       l1if_provision_transceiver_trx(l1h);</span><br><span>                 }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       check_transceiver_availability(bts, transceiver_available);</span><br><span style="color: hsl(120, 100%, 40%);">+   check_transceiver_availability(bts, bts_trx->available);</span><br><span> </span><br><span> </span><br><span>  return 0;</span><br><span>diff --git a/src/osmo-bts-trx/l1_if.h b/src/osmo-bts-trx/l1_if.h</span><br><span>index 29bd246..b2eb404 100644</span><br><span>--- a/src/osmo-bts-trx/l1_if.h</span><br><span>+++ b/src/osmo-bts-trx/l1_if.h</span><br><span>@@ -46,6 +46,7 @@</span><br><span> </span><br><span> /* gsm_bts->model_priv, specific to osmo-bts-trx */</span><br><span> struct bts_trx_priv {</span><br><span style="color: hsl(120, 100%, 40%);">+     bool available;</span><br><span>      struct osmo_trx_clock_state clk_s;</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index 6c3a8ff..51050fa 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -1677,7 +1677,7 @@</span><br><span> </span><br><span> no_clock:</span><br><span>   osmo_timerfd_disable(&tcs->fn_timer_ofd);</span><br><span style="color: hsl(0, 100%, 40%);">-        transceiver_available = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    bts_trx->available = false;</span><br><span> </span><br><span>   bts_shutdown(bts, "No clock from osmo-trx");</span><br><span> </span><br><span>@@ -1724,10 +1724,10 @@</span><br><span>         clock_gettime(CLOCK_MONOTONIC, &tv_now);</span><br><span> </span><br><span>     /* clock becomes valid */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!transceiver_available) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bts_trx->available) {</span><br><span>                LOGP(DL1C, LOGL_NOTICE, "initial GSM clock received: fn=%u\n", fn);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-               transceiver_available = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            bts_trx->available = true;</span><br><span> </span><br><span>            /* start provisioning transceiver */</span><br><span>                 l1if_provision_transceiver(bts);</span><br><span>diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c</span><br><span>index 166cfe6..ccece15 100644</span><br><span>--- a/src/osmo-bts-trx/trx_if.c</span><br><span>+++ b/src/osmo-bts-trx/trx_if.c</span><br><span>@@ -48,8 +48,6 @@</span><br><span> #include "l1_if.h"</span><br><span> #include "trx_if.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int transceiver_available = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*</span><br><span>  * socket helper functions</span><br><span>  */</span><br><span>@@ -196,12 +194,14 @@</span><br><span> static int trx_ctrl_cmd_cb(struct trx_l1h *l1h, int critical, void *cb, const char *cmd,</span><br><span>      const char *fmt, ...)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gsm_bts *bts = l1h->phy_inst->trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span>    struct trx_ctrl_msg *tcm;</span><br><span>    struct trx_ctrl_msg *prev = NULL;</span><br><span>    va_list ap;</span><br><span>  int pending;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (!transceiver_available &&</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bts_trx->available &&</span><br><span>            !(!strcmp(cmd, "POWEROFF") || !strcmp(cmd, "POWERON"))) {</span><br><span>            LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR, "CTRL %s ignored: No clock from "</span><br><span>                      "transceiver, please fix!\n", cmd);</span><br><span>@@ -1054,6 +1054,8 @@</span><br><span> int trx_if_send_burst(struct trx_l1h *l1h, uint8_t tn, uint32_t fn, uint8_t pwr,</span><br><span>    const ubit_t *bits, uint16_t nbits)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_bts *bts = l1h->phy_inst->trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span>    uint8_t hdr_ver = l1h->config.trxd_hdr_ver_use;</span><br><span>   uint8_t buf[TRX_DATA_MSG_MAX_LEN];</span><br><span> </span><br><span>@@ -1090,7 +1092,7 @@</span><br><span> </span><br><span>   /* we must be sure that we have clock, and we have sent all control</span><br><span>   * data */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (transceiver_available && llist_empty(&l1h->trx_ctrl_list)) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (bts_trx->available && llist_empty(&l1h->trx_ctrl_list)) {</span><br><span>              send(l1h->trx_ofd_data.fd, buf, nbits + 6, 0);</span><br><span>    } else</span><br><span>               LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR, "Ignoring TX data, transceiver offline.\n");</span><br><span>@@ -1225,7 +1227,9 @@</span><br><span> /*! open the PHY link using TRX protocol */</span><br><span> int bts_model_phy_link_open(struct phy_link *plink)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   struct phy_instance *pinst;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct phy_instance *pinst = phy_instance_by_num(plink, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts *bts = pinst->trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span>    int rc;</span><br><span> </span><br><span>  phy_link_state_set(plink, PHY_LINK_CONNECTING);</span><br><span>@@ -1248,7 +1252,7 @@</span><br><span>                      goto cleanup;</span><br><span>        }</span><br><span>    /* FIXME: is there better way to check/report TRX availability? */</span><br><span style="color: hsl(0, 100%, 40%);">-      transceiver_available = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+    bts_trx->available = true;</span><br><span>        return 0;</span><br><span> </span><br><span> cleanup:</span><br><span>diff --git a/src/osmo-bts-trx/trx_if.h b/src/osmo-bts-trx/trx_if.h</span><br><span>index dda7116..c187441 100644</span><br><span>--- a/src/osmo-bts-trx/trx_if.h</span><br><span>+++ b/src/osmo-bts-trx/trx_if.h</span><br><span>@@ -1,8 +1,6 @@</span><br><span> #ifndef TRX_IF_H</span><br><span> #define TRX_IF_H</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-extern int transceiver_available;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct trx_l1h;</span><br><span> </span><br><span> struct trx_ctrl_msg {</span><br><span>diff --git a/src/osmo-bts-trx/trx_vty.c b/src/osmo-bts-trx/trx_vty.c</span><br><span>index 250d180..d2d0ad2 100644</span><br><span>--- a/src/osmo-bts-trx/trx_vty.c</span><br><span>+++ b/src/osmo-bts-trx/trx_vty.c</span><br><span>@@ -55,10 +55,11 @@</span><br><span>         SHOW_STR "Display information about transceivers\n")</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty_bts;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;</span><br><span>    struct gsm_bts_trx *trx;</span><br><span>     struct trx_l1h *l1h;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (!transceiver_available) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bts_trx->available) {</span><br><span>                vty_out(vty, "transceiver is not connected%s", VTY_NEWLINE);</span><br><span>       } else {</span><br><span>             vty_out(vty, "transceiver is connected%s", VTY_NEWLINE);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/15615">change 15615</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/15615"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I35f4697bd33dbe8a4c76c9500b82c16589c701d4 </div>
<div style="display:none"> Gerrit-Change-Number: 15615 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>