pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-bts/+/15615


Change subject: bts-trx: Move transceiver_available as part of bts-trx private 
data
......................................................................

bts-trx: Move transceiver_available as part of bts-trx private data

Change-Id: I35f4697bd33dbe8a4c76c9500b82c16589c701d4
---
M src/osmo-bts-trx/l1_if.c
M src/osmo-bts-trx/l1_if.h
M src/osmo-bts-trx/scheduler_trx.c
M src/osmo-bts-trx/trx_if.c
M src/osmo-bts-trx/trx_if.h
M src/osmo-bts-trx/trx_vty.c
6 files changed, 37 insertions(+), 15 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/15/15615/1

diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c
index cd2a03c..fb75116 100644
--- a/src/osmo-bts-trx/l1_if.c
+++ b/src/osmo-bts-trx/l1_if.c
@@ -186,11 +186,28 @@
 int l1if_provision_transceiver_trx(struct trx_l1h *l1h)
 {
        uint8_t tn;
+       struct phy_link *plink;
+       struct gsm_bts *bts;
+       struct bts_trx_priv *bts_trx;
        struct phy_instance *pinst = l1h->phy_inst;
-       struct phy_link *plink = pinst->phy_link;

-       if (!transceiver_available)
+       /* During setup, pinst may still not be associated to a TRX nr */
+       if (!pinst->trx) {
+               LOGPPHI(pinst, DL1C, LOGL_INFO,
+                       "Delaying provision, TRX not yet assigned to phy 
instance\n");
                return -EIO;
+       }
+
+       bts = pinst->trx->bts;
+       bts_trx = (struct bts_trx_priv *)bts->model_priv;
+
+       if (!bts_trx->available) {
+               LOGPPHI(pinst, DL1C, LOGL_INFO,
+                       "Delaying provision, TRX not yet available\n");
+               return -EIO;
+       }
+
+       plink = pinst->phy_link;

        if (l1h->config.poweron
         && l1h->config.tsc_valid
@@ -371,6 +388,7 @@
 /* set bts attributes */
 static uint8_t trx_set_bts(struct gsm_bts *bts, struct tlv_parsed *new_attr)
 {
+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;
        struct gsm_bts_trx *trx;
        uint8_t bsic = bts->bsic;

@@ -384,7 +402,7 @@
                        l1if_provision_transceiver_trx(l1h);
                }
        }
-       check_transceiver_availability(bts, transceiver_available);
+       check_transceiver_availability(bts, bts_trx->available);


        return 0;
diff --git a/src/osmo-bts-trx/l1_if.h b/src/osmo-bts-trx/l1_if.h
index 29bd246..b2eb404 100644
--- a/src/osmo-bts-trx/l1_if.h
+++ b/src/osmo-bts-trx/l1_if.h
@@ -46,6 +46,7 @@

 /* gsm_bts->model_priv, specific to osmo-bts-trx */
 struct bts_trx_priv {
+       bool available;
        struct osmo_trx_clock_state clk_s;
 };

diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c
index 6c3a8ff..51050fa 100644
--- a/src/osmo-bts-trx/scheduler_trx.c
+++ b/src/osmo-bts-trx/scheduler_trx.c
@@ -1677,7 +1677,7 @@

 no_clock:
        osmo_timerfd_disable(&tcs->fn_timer_ofd);
-       transceiver_available = 0;
+       bts_trx->available = false;

        bts_shutdown(bts, "No clock from osmo-trx");

@@ -1724,10 +1724,10 @@
        clock_gettime(CLOCK_MONOTONIC, &tv_now);

        /* clock becomes valid */
-       if (!transceiver_available) {
+       if (!bts_trx->available) {
                LOGP(DL1C, LOGL_NOTICE, "initial GSM clock received: fn=%u\n", 
fn);

-               transceiver_available = 1;
+               bts_trx->available = true;

                /* start provisioning transceiver */
                l1if_provision_transceiver(bts);
diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c
index 166cfe6..ccece15 100644
--- a/src/osmo-bts-trx/trx_if.c
+++ b/src/osmo-bts-trx/trx_if.c
@@ -48,8 +48,6 @@
 #include "l1_if.h"
 #include "trx_if.h"

-int transceiver_available = 0;
-
 /*
  * socket helper functions
  */
@@ -196,12 +194,14 @@
 static int trx_ctrl_cmd_cb(struct trx_l1h *l1h, int critical, void *cb, const 
char *cmd,
        const char *fmt, ...)
 {
+       struct gsm_bts *bts = l1h->phy_inst->trx->bts;
+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;
        struct trx_ctrl_msg *tcm;
        struct trx_ctrl_msg *prev = NULL;
        va_list ap;
        int pending;

-       if (!transceiver_available &&
+       if (!bts_trx->available &&
            !(!strcmp(cmd, "POWEROFF") || !strcmp(cmd, "POWERON"))) {
                LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR, "CTRL %s ignored: No 
clock from "
                        "transceiver, please fix!\n", cmd);
@@ -1054,6 +1054,8 @@
 int trx_if_send_burst(struct trx_l1h *l1h, uint8_t tn, uint32_t fn, uint8_t 
pwr,
        const ubit_t *bits, uint16_t nbits)
 {
+       struct gsm_bts *bts = l1h->phy_inst->trx->bts;
+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;
        uint8_t hdr_ver = l1h->config.trxd_hdr_ver_use;
        uint8_t buf[TRX_DATA_MSG_MAX_LEN];

@@ -1090,7 +1092,7 @@

        /* we must be sure that we have clock, and we have sent all control
         * data */
-       if (transceiver_available && llist_empty(&l1h->trx_ctrl_list)) {
+       if (bts_trx->available && llist_empty(&l1h->trx_ctrl_list)) {
                send(l1h->trx_ofd_data.fd, buf, nbits + 6, 0);
        } else
                LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR, "Ignoring TX data, 
transceiver offline.\n");
@@ -1225,7 +1227,9 @@
 /*! open the PHY link using TRX protocol */
 int bts_model_phy_link_open(struct phy_link *plink)
 {
-       struct phy_instance *pinst;
+       struct phy_instance *pinst = phy_instance_by_num(plink, 0);
+       struct gsm_bts *bts = pinst->trx->bts;
+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;
        int rc;

        phy_link_state_set(plink, PHY_LINK_CONNECTING);
@@ -1248,7 +1252,7 @@
                        goto cleanup;
        }
        /* FIXME: is there better way to check/report TRX availability? */
-       transceiver_available = 1;
+       bts_trx->available = true;
        return 0;

 cleanup:
diff --git a/src/osmo-bts-trx/trx_if.h b/src/osmo-bts-trx/trx_if.h
index dda7116..c187441 100644
--- a/src/osmo-bts-trx/trx_if.h
+++ b/src/osmo-bts-trx/trx_if.h
@@ -1,8 +1,6 @@
 #ifndef TRX_IF_H
 #define TRX_IF_H

-extern int transceiver_available;
-
 struct trx_l1h;

 struct trx_ctrl_msg {
diff --git a/src/osmo-bts-trx/trx_vty.c b/src/osmo-bts-trx/trx_vty.c
index 250d180..d2d0ad2 100644
--- a/src/osmo-bts-trx/trx_vty.c
+++ b/src/osmo-bts-trx/trx_vty.c
@@ -55,10 +55,11 @@
        SHOW_STR "Display information about transceivers\n")
 {
        struct gsm_bts *bts = vty_bts;
+       struct bts_trx_priv *bts_trx = (struct bts_trx_priv *)bts->model_priv;
        struct gsm_bts_trx *trx;
        struct trx_l1h *l1h;

-       if (!transceiver_available) {
+       if (!bts_trx->available) {
                vty_out(vty, "transceiver is not connected%s", VTY_NEWLINE);
        } else {
                vty_out(vty, "transceiver is connected%s", VTY_NEWLINE);

--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/15615
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I35f4697bd33dbe8a4c76c9500b82c16589c701d4
Gerrit-Change-Number: 15615
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to