This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/3042 TRX: merge/simplify l1_if and trx_if code Related code / function structure still dates back to the pre-phy_link days. Let's clean this up to make things less convoluted and reduce the number of non-static symbols needed between code split over two files. Change-Id: I1f30ae1f547a5c01c516d4a05032193294c25f2d --- M src/osmo-bts-trx/l1_if.c M src/osmo-bts-trx/l1_if.h M src/osmo-bts-trx/trx_if.c M src/osmo-bts-trx/trx_if.h 4 files changed, 93 insertions(+), 104 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/42/3042/1 diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c index a7bcd2c..59a6b6c 100644 --- a/src/osmo-bts-trx/l1_if.c +++ b/src/osmo-bts-trx/l1_if.c @@ -57,48 +57,6 @@ }; -/* - * create/destroy trx l1 instance - */ - -struct trx_l1h *l1if_open(struct phy_instance *pinst) -{ - struct trx_l1h *l1h; - int rc; - - l1h = pinst->u.osmotrx.hdl; - if (!l1h) - return NULL; - - rc = trx_sched_init(&l1h->l1s, pinst->trx); - if (rc < 0) { - LOGP(DL1C, LOGL_FATAL, "Cannot initialize scheduler for phy " - "instance %d\n", pinst->num); - return NULL; - } - - rc = trx_if_open(l1h); - if (rc < 0) { - LOGP(DL1C, LOGL_FATAL, "Cannot open TRX interface for phy " - "instance %d\n", pinst->num); - l1if_close(l1h); - return NULL; - } - - return l1h; -} - -void l1if_close(struct trx_l1h *l1h) -{ - trx_if_close(l1h); - trx_sched_exit(&l1h->l1s); - talloc_free(l1h); -} - -void l1if_reset(struct trx_l1h *l1h) -{ -} - static void check_transceiver_availability_trx(struct trx_l1h *l1h, int avail) { struct phy_instance *pinst = l1h->phy_inst; diff --git a/src/osmo-bts-trx/l1_if.h b/src/osmo-bts-trx/l1_if.h index 1864857..40f55ab 100644 --- a/src/osmo-bts-trx/l1_if.h +++ b/src/osmo-bts-trx/l1_if.h @@ -61,9 +61,6 @@ struct l1sched_trx l1s; }; -struct trx_l1h *l1if_open(struct phy_instance *pinst); -void l1if_close(struct trx_l1h *l1h); -void l1if_reset(struct trx_l1h *l1h); int check_transceiver_availability(struct gsm_bts *bts, int avail); int l1if_provision_transceiver_trx(struct trx_l1h *l1h); int l1if_provision_transceiver(struct gsm_bts *bts); diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c index ba2908a..c56efbf 100644 --- a/src/osmo-bts-trx/trx_if.c +++ b/src/osmo-bts-trx/trx_if.c @@ -536,47 +536,32 @@ * open/close */ -/*! open the PHY link using TRX protocol */ -int bts_model_phy_link_open(struct phy_link *plink) +/*! flush (delete) all pending control messages */ +void trx_if_flush(struct trx_l1h *l1h) { - struct phy_instance *pinst; - int rc; + struct trx_ctrl_msg *tcm; - phy_link_state_set(plink, PHY_LINK_CONNECTING); - - /* open the shared/common clock socket */ - rc = trx_udp_open(plink, &plink->u.osmotrx.trx_ofd_clk, - plink->u.osmotrx.local_ip, - plink->u.osmotrx.base_port_local, - plink->u.osmotrx.remote_ip, - plink->u.osmotrx.base_port_remote, - trx_clk_read_cb); - if (rc < 0) { - phy_link_state_set(plink, PHY_LINK_SHUTDOWN); - return -1; + /* free ctrl message list */ + while (!llist_empty(&l1h->trx_ctrl_list)) { + tcm = llist_entry(l1h->trx_ctrl_list.next, struct trx_ctrl_msg, + list); + llist_del(&tcm->list); + talloc_free(tcm); } +} - /* open the individual instances with their ctrl+data sockets */ - llist_for_each_entry(pinst, &plink->instances, list) { - pinst->u.osmotrx.hdl = l1if_open(pinst); - if (!pinst->u.osmotrx.hdl) - goto cleanup; - } - /* FIXME: is there better way to check/report TRX availability? */ - transceiver_available = 1; - phy_link_state_set(plink, PHY_LINK_CONNECTED); - return 0; +/*! close the TRX for given handle (data + control socket) */ +void trx_if_close(struct trx_l1h *l1h) +{ + struct phy_instance *pinst = l1h->phy_inst; + LOGP(DTRX, LOGL_NOTICE, "Close transceiver for %s\n", + phy_instance_name(pinst)); -cleanup: - phy_link_state_set(plink, PHY_LINK_SHUTDOWN); - llist_for_each_entry(pinst, &plink->instances, list) { - if (pinst->u.osmotrx.hdl) { - trx_if_close(pinst->u.osmotrx.hdl); - pinst->u.osmotrx.hdl = NULL; - } - } - trx_udp_close(&plink->u.osmotrx.trx_ofd_clk); - return -1; + trx_if_flush(l1h); + + /* close sockets */ + trx_udp_close(&l1h->trx_ofd_ctrl); + trx_udp_close(&l1h->trx_ofd_data); } /*! compute UDP port number used for TRX protocol */ @@ -595,7 +580,7 @@ } /*! open a TRX interface. creates contro + data sockets */ -int trx_if_open(struct trx_l1h *l1h) +static int trx_if_open(struct trx_l1h *l1h) { struct phy_instance *pinst = l1h->phy_inst; struct phy_link *plink = pinst->phy_link; @@ -637,32 +622,84 @@ return rc; } -/*! flush (delete) all pending control messages */ -void trx_if_flush(struct trx_l1h *l1h) +/*! close the control + burst data sockets for one phy_instance */ +static void trx_phy_inst_close(struct phy_instance *pinst) { - struct trx_ctrl_msg *tcm; + struct trx_l1h *l1h = pinst->u.osmotrx.hdl; - /* free ctrl message list */ - while (!llist_empty(&l1h->trx_ctrl_list)) { - tcm = llist_entry(l1h->trx_ctrl_list.next, struct trx_ctrl_msg, - list); - llist_del(&tcm->list); - talloc_free(tcm); - } + trx_if_close(l1h); + trx_sched_exit(&l1h->l1s); + talloc_free(l1h); } -/*! close the TRX for given handle (data + control socket) */ -void trx_if_close(struct trx_l1h *l1h) +/*! open the control + burst data sockets for one phy_instance */ +static int trx_phy_inst_open(struct phy_instance *pinst) { - struct phy_instance *pinst = l1h->phy_inst; - LOGP(DTRX, LOGL_NOTICE, "Close transceiver for %s\n", - phy_instance_name(pinst)); + struct trx_l1h *l1h; + int rc; - trx_if_flush(l1h); + l1h = pinst->u.osmotrx.hdl; + if (!l1h) + return -EINVAL; - /* close sockets */ - trx_udp_close(&l1h->trx_ofd_ctrl); - trx_udp_close(&l1h->trx_ofd_data); + rc = trx_sched_init(&l1h->l1s, pinst->trx); + if (rc < 0) { + LOGP(DL1C, LOGL_FATAL, "Cannot initialize scheduler for phy " + "instance %d\n", pinst->num); + return -EIO; + } + + rc = trx_if_open(l1h); + if (rc < 0) { + LOGP(DL1C, LOGL_FATAL, "Cannot open TRX interface for phy " + "instance %d\n", pinst->num); + trx_phy_inst_close(pinst); + return -EIO; + } + + return 0; +} + +/*! open the PHY link using TRX protocol */ +int bts_model_phy_link_open(struct phy_link *plink) +{ + struct phy_instance *pinst; + int rc; + + phy_link_state_set(plink, PHY_LINK_CONNECTING); + + /* open the shared/common clock socket */ + rc = trx_udp_open(plink, &plink->u.osmotrx.trx_ofd_clk, + plink->u.osmotrx.local_ip, + plink->u.osmotrx.base_port_local, + plink->u.osmotrx.remote_ip, + plink->u.osmotrx.base_port_remote, + trx_clk_read_cb); + if (rc < 0) { + phy_link_state_set(plink, PHY_LINK_SHUTDOWN); + return -1; + } + + /* open the individual instances with their ctrl+data sockets */ + llist_for_each_entry(pinst, &plink->instances, list) { + if (trx_phy_inst_open(pinst) < 0) + goto cleanup; + } + /* FIXME: is there better way to check/report TRX availability? */ + transceiver_available = 1; + phy_link_state_set(plink, PHY_LINK_CONNECTED); + return 0; + +cleanup: + phy_link_state_set(plink, PHY_LINK_SHUTDOWN); + llist_for_each_entry(pinst, &plink->instances, list) { + if (pinst->u.osmotrx.hdl) { + trx_if_close(pinst->u.osmotrx.hdl); + pinst->u.osmotrx.hdl = NULL; + } + } + trx_udp_close(&plink->u.osmotrx.trx_ofd_clk); + return -1; } /*! determine if the TRX for given handle is powered up */ diff --git a/src/osmo-bts-trx/trx_if.h b/src/osmo-bts-trx/trx_if.h index 93ea180..1fc454d 100644 --- a/src/osmo-bts-trx/trx_if.h +++ b/src/osmo-bts-trx/trx_if.h @@ -31,9 +31,6 @@ int trx_if_cmd_nohandover(struct trx_l1h *l1h, uint8_t tn, uint8_t ss); 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); -int trx_if_open(struct trx_l1h *l1h); -void trx_if_flush(struct trx_l1h *l1h); -void trx_if_close(struct trx_l1h *l1h); int trx_if_powered(struct trx_l1h *l1h); #endif /* TRX_IF_H */ -- To view, visit https://gerrit.osmocom.org/3042 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1f30ae1f547a5c01c516d4a05032193294c25f2d Gerrit-PatchSet: 1 Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org>