Vadim Yanitskiy has uploaded this change for review. ( 
https://gerrit.osmocom.org/12612


Change subject: trxcon/l1ctl.c: pass trxcon_inst pointer to RX handlers
......................................................................

trxcon/l1ctl.c: pass trxcon_inst pointer to RX handlers

Change-Id: I4e59f547a165b30aa9538ae8f9d6bd822067315b
---
M src/host/trxcon/l1ctl.c
M src/host/trxcon/l1ctl.h
M src/host/trxcon/trxcon_fsm.c
3 files changed, 79 insertions(+), 76 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/12/12612/1

diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c
index 0b6d75a..8f0be48 100644
--- a/src/host/trxcon/l1ctl.c
+++ b/src/host/trxcon/l1ctl.c
@@ -42,6 +42,7 @@
 #include "l1ctl_link.h"
 #include "l1ctl_proto.h"

+#include "trxcon.h"
 #include "trx_if.h"
 #include "sched_trx.h"

@@ -288,7 +289,7 @@
 /* FBSB expire timer */
 static void fbsb_timer_cb(void *data)
 {
-       struct l1ctl_link *l1l = (struct l1ctl_link *) data;
+       struct trxcon_inst *trxcon = (struct trxcon_inst *) data;
        struct l1ctl_fbsb_conf *conf;
        struct l1ctl_info_dl *dl;
        struct msgb *msg;
@@ -306,7 +307,7 @@
        memset(dl, 0x00, len);

        /* Fill in current ARFCN */
-       dl->band_arfcn = htons(l1l->trx->band_arfcn);
+       dl->band_arfcn = htons(trxcon->trx->band_arfcn);

        /* Fill in FBSB payload: BSIC and sync result */
        conf = (struct l1ctl_fbsb_conf *) msgb_put(msg, sizeof(*conf));
@@ -314,12 +315,12 @@
        conf->bsic = 0;

        /* Ask SCH handler not to send L1CTL_FBSB_CONF anymore */
-       l1l->fbsb_conf_sent = 1;
+       trxcon->l1l->fbsb_conf_sent = 1;

-       l1ctl_link_send(l1l, msg);
+       l1ctl_link_send(trxcon->l1l, msg);
 }

-static int l1ctl_rx_fbsb_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_fbsb_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        enum gsm_phys_chan_config ch_config;
        struct l1ctl_fbsb_req *fbsb;
@@ -344,38 +345,38 @@
                band_arfcn &~ ARFCN_FLAG_MASK);

        /* Reset scheduler and clock counter */
-       sched_trx_reset(l1l->trx, true);
+       sched_trx_reset(trxcon->trx, true);

        /* Configure a single timeslot */
-       sched_trx_configure_ts(l1l->trx, 0, ch_config);
+       sched_trx_configure_ts(trxcon->trx, 0, ch_config);

        /* Ask SCH handler to send L1CTL_FBSB_CONF */
-       l1l->fbsb_conf_sent = 0;
+       trxcon->l1l->fbsb_conf_sent = 0;

        /* Only if current ARFCN differs */
-       if (l1l->trx->band_arfcn != band_arfcn) {
+       if (trxcon->trx->band_arfcn != band_arfcn) {
                /* Update current ARFCN */
-               l1l->trx->band_arfcn = band_arfcn;
+               trxcon->trx->band_arfcn = band_arfcn;

                /* Tune transceiver to required ARFCN */
-               trx_if_cmd_rxtune(l1l->trx, band_arfcn);
-               trx_if_cmd_txtune(l1l->trx, band_arfcn);
+               trx_if_cmd_rxtune(trxcon->trx, band_arfcn);
+               trx_if_cmd_txtune(trxcon->trx, band_arfcn);
        }

-       trx_if_cmd_poweron(l1l->trx);
+       trx_if_cmd_poweron(trxcon->trx);

        /* Start FBSB expire timer */
-       l1l->fbsb_timer.data = l1l;
-       l1l->fbsb_timer.cb = fbsb_timer_cb;
-       osmo_timer_schedule(&l1l->fbsb_timer, 0,
-               timeout * FRAME_DURATION_uS);
+       trxcon->l1l->fbsb_timer.data = trxcon;
+       trxcon->l1l->fbsb_timer.cb = fbsb_timer_cb;
+       osmo_timer_schedule(&trxcon->l1l->fbsb_timer,
+               0, timeout * FRAME_DURATION_uS);

 exit:
        msgb_free(msg);
        return rc;
 }

-static int l1ctl_rx_pm_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_pm_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        uint16_t band_arfcn_start, band_arfcn_stop;
        struct l1ctl_pm_req *pmr;
@@ -399,14 +400,15 @@
                band_arfcn_stop &~ ARFCN_FLAG_MASK);

        /* Send measurement request to transceiver */
-       rc = trx_if_cmd_measure(l1l->trx, band_arfcn_start, band_arfcn_stop);
+       rc = trx_if_cmd_measure(trxcon->trx,
+               band_arfcn_start, band_arfcn_stop);

 exit:
        msgb_free(msg);
        return rc;
 }

-static int l1ctl_rx_reset_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_reset_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_reset *res;
        int rc = 0;
@@ -425,12 +427,12 @@
        switch (res->type) {
        case L1CTL_RES_T_FULL:
                /* TODO: implement trx_if_reset() */
-               trx_if_cmd_poweroff(l1l->trx);
-               trx_if_cmd_echo(l1l->trx);
+               trx_if_cmd_poweroff(trxcon->trx);
+               trx_if_cmd_echo(trxcon->trx);

                /* Fall through */
        case L1CTL_RES_T_SCHED:
-               sched_trx_reset(l1l->trx, true);
+               sched_trx_reset(trxcon->trx, true);
                break;
        default:
                LOGP(DL1C, LOGL_ERROR, "Unknown L1CTL_RESET_REQ type\n");
@@ -438,14 +440,14 @@
        }

        /* Confirm */
-       rc = l1ctl_tx_reset_conf(l1l, res->type);
+       rc = l1ctl_tx_reset_conf(trxcon->l1l, res->type);

 exit:
        msgb_free(msg);
        return rc;
 }

-static int l1ctl_rx_echo_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_echo_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_hdr *l1h;

@@ -457,10 +459,10 @@
        l1h->msg_type = L1CTL_ECHO_CONF;
        msg->data = msg->l1h;

-       return l1ctl_link_send(l1l, msg);
+       return l1ctl_link_send(trxcon->l1l, msg);
 }

-static int l1ctl_rx_ccch_mode_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_ccch_mode_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        enum gsm_phys_chan_config ch_config;
        struct l1ctl_ccch_mode_req *req;
@@ -479,7 +481,7 @@
                req->ccch_mode); /* TODO: add value-string for ccch_mode */

        /* Make sure that TS0 is allocated and configured */
-       ts = l1l->trx->ts_list[0];
+       ts = trxcon->trx->ts_list[0];
        if (ts == NULL || ts->mf_layout == NULL) {
                LOGP(DL1C, LOGL_ERROR, "TS0 is not configured");
                rc = -EINVAL;
@@ -491,18 +493,18 @@

        /* Do nothing if the current mode matches required */
        if (ts->mf_layout->chan_config != ch_config)
-               rc = sched_trx_configure_ts(l1l->trx, 0, ch_config);
+               rc = sched_trx_configure_ts(trxcon->trx, 0, ch_config);

        /* Confirm reconfiguration */
        if (!rc)
-               rc = l1ctl_tx_ccch_mode_conf(l1l, req->ccch_mode);
+               rc = l1ctl_tx_ccch_mode_conf(trxcon->l1l, req->ccch_mode);

 exit:
        msgb_free(msg);
        return rc;
 }

-static int l1ctl_rx_rach_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_rach_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_rach_req *req;
        struct l1ctl_info_ul *ul;
@@ -529,7 +531,7 @@
                "(offset=%u ra=0x%02x)\n", req->offset, req->ra);

        /* Init a new primitive */
-       rc = sched_prim_init(l1l->trx, &prim, len, chan_nr, link_id);
+       rc = sched_prim_init(trxcon->trx, &prim, len, chan_nr, link_id);
        if (rc)
                goto exit;

@@ -539,7 +541,7 @@
         * FIXME: what if requested TS is not configured?
         * Or what if one (such as TCH) has no TRXC_RACH slots?
         */
-       rc = sched_prim_push(l1l->trx, prim, chan_nr);
+       rc = sched_prim_push(trxcon->trx, prim, chan_nr);
        if (rc) {
                talloc_free(prim);
                goto exit;
@@ -553,7 +555,7 @@
        return rc;
 }

-static int l1ctl_proc_est_req_h0(struct trx_instance *trx, struct l1ctl_h0 *h)
+static int l1ctl_proc_est_req_h0(struct trxcon_inst *trxcon, struct l1ctl_h0 
*h)
 {
        uint16_t band_arfcn;
        int rc = 0;
@@ -564,22 +566,22 @@
                "ARFCN=%u channel\n", band_arfcn &~ ARFCN_FLAG_MASK);

        /* Do we need to retune? */
-       if (trx->band_arfcn == band_arfcn)
+       if (trxcon->trx->band_arfcn == band_arfcn)
                return 0;

        /* Tune transceiver to required ARFCN */
-       rc |= trx_if_cmd_rxtune(trx, band_arfcn);
-       rc |= trx_if_cmd_txtune(trx, band_arfcn);
+       rc |= trx_if_cmd_rxtune(trxcon->trx, band_arfcn);
+       rc |= trx_if_cmd_txtune(trxcon->trx, band_arfcn);
        if (rc)
                return rc;

        /* Update current ARFCN */
-       trx->band_arfcn = band_arfcn;
+       trxcon->trx->band_arfcn = band_arfcn;

        return 0;
 }

-static int l1ctl_proc_est_req_h1(struct trx_instance *trx, struct l1ctl_h1 *h)
+static int l1ctl_proc_est_req_h1(struct trxcon_inst *trxcon, struct l1ctl_h1 
*h)
 {
        int rc;

@@ -594,7 +596,7 @@
        }

        /* Forward hopping parameters to TRX */
-       rc = trx_if_cmd_setfh(trx, h->hsn, h->maio, h->ma, h->n);
+       rc = trx_if_cmd_setfh(trxcon->trx, h->hsn, h->maio, h->ma, h->n);
        if (rc)
                return rc;

@@ -605,7 +607,7 @@
        return 0;
 }

-static int l1ctl_rx_dm_est_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_dm_est_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        enum gsm_phys_chan_config config;
        struct l1ctl_dm_est_req *est_req;
@@ -626,14 +628,14 @@

        /* Frequency hopping? */
        if (est_req->h)
-               rc = l1ctl_proc_est_req_h1(l1l->trx, &est_req->h1);
+               rc = l1ctl_proc_est_req_h1(trxcon, &est_req->h1);
        else /* Single ARFCN */
-               rc = l1ctl_proc_est_req_h0(l1l->trx, &est_req->h0);
+               rc = l1ctl_proc_est_req_h0(trxcon, &est_req->h0);
        if (rc)
                goto exit;
 
        /* Update TSC (Training Sequence Code) */
-       l1l->trx->tsc = est_req->tsc;
+       trxcon->trx->tsc = est_req->tsc;

        /* Determine channel config */
        config = sched_trx_chan_nr2pchan_config(chan_nr);
@@ -644,8 +646,8 @@
        }

        /* Configure requested TS */
-       rc = sched_trx_configure_ts(l1l->trx, tn, config);
-       ts = l1l->trx->ts_list[tn];
+       rc = sched_trx_configure_ts(trxcon->trx, tn, config);
+       ts = trxcon->trx->ts_list[tn];
        if (rc) {
                rc = -EINVAL;
                goto exit;
@@ -667,13 +669,13 @@
        return rc;
 }

-static int l1ctl_rx_dm_rel_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_dm_rel_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        LOGP(DL1C, LOGL_NOTICE, "Received L1CTL_DM_REL_REQ, "
                "switching back to CCCH\n");

        /* Reset scheduler */
-       sched_trx_reset(l1l->trx, false);
+       sched_trx_reset(trxcon->trx, false);

        msgb_free(msg);
        return 0;
@@ -682,7 +684,7 @@
 /**
  * Handles both L1CTL_DATA_REQ and L1CTL_TRAFFIC_REQ.
  */
-static int l1ctl_rx_dt_req(struct l1ctl_link *l1l,
+static int l1ctl_rx_dt_req(struct trxcon_inst *trxcon,
        struct msgb *msg, bool traffic)
 {
        struct l1ctl_info_ul *ul;
@@ -707,13 +709,13 @@
                chan_nr, link_id, payload_len);

        /* Init a new primitive */
-       rc = sched_prim_init(l1l->trx, &prim, payload_len,
+       rc = sched_prim_init(trxcon->trx, &prim, payload_len,
                chan_nr, link_id);
        if (rc)
                goto exit;

        /* Push this primitive to transmit queue */
-       rc = sched_prim_push(l1l->trx, prim, chan_nr);
+       rc = sched_prim_push(trxcon->trx, prim, chan_nr);
        if (rc) {
                talloc_free(prim);
                goto exit;
@@ -727,7 +729,7 @@
        return rc;
 }

-static int l1ctl_rx_param_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_param_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_par_req *par_req;
        struct l1ctl_info_ul *ul;
@@ -739,18 +741,18 @@
                "(ta=%d, tx_power=%u)\n", par_req->ta, par_req->tx_power);

        /* Instruct TRX to use new TA value */
-       if (l1l->trx->ta != par_req->ta) {
-               trx_if_cmd_setta(l1l->trx, par_req->ta);
-               l1l->trx->ta = par_req->ta;
+       if (trxcon->trx->ta != par_req->ta) {
+               trx_if_cmd_setta(trxcon->trx, par_req->ta);
+               trxcon->trx->ta = par_req->ta;
        }

-       l1l->trx->tx_power = par_req->tx_power;
+       trxcon->trx->tx_power = par_req->tx_power;

        msgb_free(msg);
        return 0;
 }

-static int l1ctl_rx_tch_mode_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_tch_mode_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_tch_mode_req *req;
        struct trx_lchan_state *lchan;
@@ -765,7 +767,7 @@
        /* Iterate over timeslot list */
        for (i = 0; i < TRX_TS_COUNT; i++) {
                /* Timeslot is not allocated */
-               ts = l1l->trx->ts_list[i];
+               ts = trxcon->trx->ts_list[i];
                if (ts == NULL)
                        continue;

@@ -790,7 +792,7 @@
        return 0;
 }

-static int l1ctl_rx_crypto_req(struct l1ctl_link *l1l, struct msgb *msg)
+static int l1ctl_rx_crypto_req(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_crypto_req *req;
        struct l1ctl_info_ul *ul;
@@ -808,7 +810,7 @@
        tn = ul->chan_nr & 0x7;

        /* Make sure that required TS is allocated and configured */
-       ts = l1l->trx->ts_list[tn];
+       ts = trxcon->trx->ts_list[tn];
        if (ts == NULL || ts->mf_layout == NULL) {
                LOGP(DL1C, LOGL_ERROR, "TS %u is not configured\n", tn);
                rc = -EINVAL;
@@ -828,7 +830,7 @@
        return rc;
 }

-int l1ctl_rx_cb(struct l1ctl_link *l1l, struct msgb *msg)
+int l1ctl_rx_cb(struct trxcon_inst *trxcon, struct msgb *msg)
 {
        struct l1ctl_hdr *l1h;

@@ -837,31 +839,31 @@

        switch (l1h->msg_type) {
        case L1CTL_FBSB_REQ:
-               return l1ctl_rx_fbsb_req(l1l, msg);
+               return l1ctl_rx_fbsb_req(trxcon, msg);
        case L1CTL_PM_REQ:
-               return l1ctl_rx_pm_req(l1l, msg);
+               return l1ctl_rx_pm_req(trxcon, msg);
        case L1CTL_RESET_REQ:
-               return l1ctl_rx_reset_req(l1l, msg);
+               return l1ctl_rx_reset_req(trxcon, msg);
        case L1CTL_ECHO_REQ:
-               return l1ctl_rx_echo_req(l1l, msg);
+               return l1ctl_rx_echo_req(trxcon, msg);
        case L1CTL_CCCH_MODE_REQ:
-               return l1ctl_rx_ccch_mode_req(l1l, msg);
+               return l1ctl_rx_ccch_mode_req(trxcon, msg);
        case L1CTL_RACH_REQ:
-               return l1ctl_rx_rach_req(l1l, msg);
+               return l1ctl_rx_rach_req(trxcon, msg);
        case L1CTL_DM_EST_REQ:
-               return l1ctl_rx_dm_est_req(l1l, msg);
+               return l1ctl_rx_dm_est_req(trxcon, msg);
        case L1CTL_DM_REL_REQ:
-               return l1ctl_rx_dm_rel_req(l1l, msg);
+               return l1ctl_rx_dm_rel_req(trxcon, msg);
        case L1CTL_DATA_REQ:
-               return l1ctl_rx_dt_req(l1l, msg, false);
+               return l1ctl_rx_dt_req(trxcon, msg, false);
        case L1CTL_TRAFFIC_REQ:
-               return l1ctl_rx_dt_req(l1l, msg, true);
+               return l1ctl_rx_dt_req(trxcon, msg, true);
        case L1CTL_PARAM_REQ:
-               return l1ctl_rx_param_req(l1l, msg);
+               return l1ctl_rx_param_req(trxcon, msg);
        case L1CTL_TCH_MODE_REQ:
-               return l1ctl_rx_tch_mode_req(l1l, msg);
+               return l1ctl_rx_tch_mode_req(trxcon, msg);
        case L1CTL_CRYPTO_REQ:
-               return l1ctl_rx_crypto_req(l1l, msg);
+               return l1ctl_rx_crypto_req(trxcon, msg);

        /* Not (yet) handled messages */
        case L1CTL_NEIGH_PM_REQ:
diff --git a/src/host/trxcon/l1ctl.h b/src/host/trxcon/l1ctl.h
index ca8c0be..76b49e3 100644
--- a/src/host/trxcon/l1ctl.h
+++ b/src/host/trxcon/l1ctl.h
@@ -3,11 +3,12 @@
 #include <stdint.h>
 #include <osmocom/core/msgb.h>

+#include "trxcon.h"
 #include "l1ctl_link.h"
 #include "l1ctl_proto.h"

 /* Event handlers */
-int l1ctl_rx_cb(struct l1ctl_link *l1l, struct msgb *msg);
+int l1ctl_rx_cb(struct trxcon_inst *trxcon, struct msgb *msg);
 void l1ctl_shutdown_cb(struct l1ctl_link *l1l);

 int l1ctl_tx_fbsb_conf(struct l1ctl_link *l1l, uint8_t result,
diff --git a/src/host/trxcon/trxcon_fsm.c b/src/host/trxcon/trxcon_fsm.c
index f90f88b..4e9473d 100644
--- a/src/host/trxcon/trxcon_fsm.c
+++ b/src/host/trxcon/trxcon_fsm.c
@@ -58,7 +58,7 @@
                break;
        case TRXCON_EV_L1CTL_REQ:
                OSMO_ASSERT(data != NULL);
-               l1ctl_rx_cb(trxcon->l1l, (struct msgb *) data);
+               l1ctl_rx_cb(trxcon, (struct msgb *) data);
                break;
        default:
                LOGPFSML(fi, LOGL_ERROR, "Unhandled event '%s'\n",

--
To view, visit https://gerrit.osmocom.org/12612
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4e59f547a165b30aa9538ae8f9d6bd822067315b
Gerrit-Change-Number: 12612
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com>

Reply via email to