<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12612">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/l1ctl.c: pass trxcon_inst pointer to RX handlers<br><br>Change-Id: I4e59f547a165b30aa9538ae8f9d6bd822067315b<br>---<br>M src/host/trxcon/l1ctl.c<br>M src/host/trxcon/l1ctl.h<br>M src/host/trxcon/trxcon_fsm.c<br>3 files changed, 79 insertions(+), 76 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/12/12612/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c</span><br><span>index 0b6d75a..8f0be48 100644</span><br><span>--- a/src/host/trxcon/l1ctl.c</span><br><span>+++ b/src/host/trxcon/l1ctl.c</span><br><span>@@ -42,6 +42,7 @@</span><br><span> #include "l1ctl_link.h"</span><br><span> #include "l1ctl_proto.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "trxcon.h"</span><br><span> #include "trx_if.h"</span><br><span> #include "sched_trx.h"</span><br><span> </span><br><span>@@ -288,7 +289,7 @@</span><br><span> /* FBSB expire timer */</span><br><span> static void fbsb_timer_cb(void *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       struct l1ctl_link *l1l = (struct l1ctl_link *) data;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct trxcon_inst *trxcon = (struct trxcon_inst *) data;</span><br><span>    struct l1ctl_fbsb_conf *conf;</span><br><span>        struct l1ctl_info_dl *dl;</span><br><span>    struct msgb *msg;</span><br><span>@@ -306,7 +307,7 @@</span><br><span>      memset(dl, 0x00, len);</span><br><span> </span><br><span>   /* Fill in current ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-     dl->band_arfcn = htons(l1l->trx->band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+        dl->band_arfcn = htons(trxcon->trx->band_arfcn);</span><br><span> </span><br><span>        /* Fill in FBSB payload: BSIC and sync result */</span><br><span>     conf = (struct l1ctl_fbsb_conf *) msgb_put(msg, sizeof(*conf));</span><br><span>@@ -314,12 +315,12 @@</span><br><span>      conf->bsic = 0;</span><br><span> </span><br><span>       /* Ask SCH handler not to send L1CTL_FBSB_CONF anymore */</span><br><span style="color: hsl(0, 100%, 40%);">-       l1l->fbsb_conf_sent = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+   trxcon->l1l->fbsb_conf_sent = 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      l1ctl_link_send(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+    l1ctl_link_send(trxcon->l1l, msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_fbsb_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_fbsb_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>        enum gsm_phys_chan_config ch_config;</span><br><span>         struct l1ctl_fbsb_req *fbsb;</span><br><span>@@ -344,38 +345,38 @@</span><br><span>                 band_arfcn &~ ARFCN_FLAG_MASK);</span><br><span> </span><br><span>      /* Reset scheduler and clock counter */</span><br><span style="color: hsl(0, 100%, 40%);">- sched_trx_reset(l1l->trx, true);</span><br><span style="color: hsl(120, 100%, 40%);">+   sched_trx_reset(trxcon->trx, true);</span><br><span> </span><br><span>   /* Configure a single timeslot */</span><br><span style="color: hsl(0, 100%, 40%);">-       sched_trx_configure_ts(l1l->trx, 0, ch_config);</span><br><span style="color: hsl(120, 100%, 40%);">+    sched_trx_configure_ts(trxcon->trx, 0, ch_config);</span><br><span> </span><br><span>    /* Ask SCH handler to send L1CTL_FBSB_CONF */</span><br><span style="color: hsl(0, 100%, 40%);">-   l1l->fbsb_conf_sent = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   trxcon->l1l->fbsb_conf_sent = 0;</span><br><span> </span><br><span>   /* Only if current ARFCN differs */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (l1l->trx->band_arfcn != band_arfcn) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (trxcon->trx->band_arfcn != band_arfcn) {</span><br><span>           /* Update current ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-              l1l->trx->band_arfcn = band_arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+              trxcon->trx->band_arfcn = band_arfcn;</span><br><span> </span><br><span>              /* Tune transceiver to required ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-                trx_if_cmd_rxtune(l1l->trx, band_arfcn);</span><br><span style="color: hsl(0, 100%, 40%);">-             trx_if_cmd_txtune(l1l->trx, band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+           trx_if_cmd_rxtune(trxcon->trx, band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+                trx_if_cmd_txtune(trxcon->trx, band_arfcn);</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   trx_if_cmd_poweron(l1l->trx);</span><br><span style="color: hsl(120, 100%, 40%);">+      trx_if_cmd_poweron(trxcon->trx);</span><br><span> </span><br><span>      /* Start FBSB expire timer */</span><br><span style="color: hsl(0, 100%, 40%);">-   l1l->fbsb_timer.data = l1l;</span><br><span style="color: hsl(0, 100%, 40%);">-  l1l->fbsb_timer.cb = fbsb_timer_cb;</span><br><span style="color: hsl(0, 100%, 40%);">-  osmo_timer_schedule(&l1l->fbsb_timer, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-         timeout * FRAME_DURATION_uS);</span><br><span style="color: hsl(120, 100%, 40%);">+ trxcon->l1l->fbsb_timer.data = trxcon;</span><br><span style="color: hsl(120, 100%, 40%);">+  trxcon->l1l->fbsb_timer.cb = fbsb_timer_cb;</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_timer_schedule(&trxcon->l1l->fbsb_timer,</span><br><span style="color: hsl(120, 100%, 40%);">+               0, timeout * FRAME_DURATION_uS);</span><br><span> </span><br><span> exit:</span><br><span>        msgb_free(msg);</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_pm_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_pm_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>       uint16_t band_arfcn_start, band_arfcn_stop;</span><br><span>  struct l1ctl_pm_req *pmr;</span><br><span>@@ -399,14 +400,15 @@</span><br><span>            band_arfcn_stop &~ ARFCN_FLAG_MASK);</span><br><span> </span><br><span>         /* Send measurement request to transceiver */</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = trx_if_cmd_measure(l1l->trx, band_arfcn_start, band_arfcn_stop);</span><br><span style="color: hsl(120, 100%, 40%);">+      rc = trx_if_cmd_measure(trxcon->trx,</span><br><span style="color: hsl(120, 100%, 40%);">+               band_arfcn_start, band_arfcn_stop);</span><br><span> </span><br><span> exit:</span><br><span>     msgb_free(msg);</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_reset_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_reset_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>         struct l1ctl_reset *res;</span><br><span>     int rc = 0;</span><br><span>@@ -425,12 +427,12 @@</span><br><span>  switch (res->type) {</span><br><span>      case L1CTL_RES_T_FULL:</span><br><span>               /* TODO: implement trx_if_reset() */</span><br><span style="color: hsl(0, 100%, 40%);">-            trx_if_cmd_poweroff(l1l->trx);</span><br><span style="color: hsl(0, 100%, 40%);">-               trx_if_cmd_echo(l1l->trx);</span><br><span style="color: hsl(120, 100%, 40%);">+         trx_if_cmd_poweroff(trxcon->trx);</span><br><span style="color: hsl(120, 100%, 40%);">+          trx_if_cmd_echo(trxcon->trx);</span><br><span> </span><br><span>                 /* Fall through */</span><br><span>   case L1CTL_RES_T_SCHED:</span><br><span style="color: hsl(0, 100%, 40%);">-         sched_trx_reset(l1l->trx, true);</span><br><span style="color: hsl(120, 100%, 40%);">+           sched_trx_reset(trxcon->trx, true);</span><br><span>               break;</span><br><span>       default:</span><br><span>             LOGP(DL1C, LOGL_ERROR, "Unknown L1CTL_RESET_REQ type\n");</span><br><span>@@ -438,14 +440,14 @@</span><br><span>  }</span><br><span> </span><br><span>        /* Confirm */</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = l1ctl_tx_reset_conf(l1l, res->type);</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = l1ctl_tx_reset_conf(trxcon->l1l, res->type);</span><br><span> </span><br><span> exit:</span><br><span>         msgb_free(msg);</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_echo_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_echo_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>   struct l1ctl_hdr *l1h;</span><br><span> </span><br><span>@@ -457,10 +459,10 @@</span><br><span>   l1h->msg_type = L1CTL_ECHO_CONF;</span><br><span>  msg->data = msg->l1h;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- return l1ctl_link_send(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+     return l1ctl_link_send(trxcon->l1l, msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_ccch_mode_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_ccch_mode_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>       enum gsm_phys_chan_config ch_config;</span><br><span>         struct l1ctl_ccch_mode_req *req;</span><br><span>@@ -479,7 +481,7 @@</span><br><span>               req->ccch_mode); /* TODO: add value-string for ccch_mode */</span><br><span> </span><br><span>   /* Make sure that TS0 is allocated and configured */</span><br><span style="color: hsl(0, 100%, 40%);">-    ts = l1l->trx->ts_list[0];</span><br><span style="color: hsl(120, 100%, 40%);">+      ts = trxcon->trx->ts_list[0];</span><br><span>  if (ts == NULL || ts->mf_layout == NULL) {</span><br><span>                LOGP(DL1C, LOGL_ERROR, "TS0 is not configured");</span><br><span>           rc = -EINVAL;</span><br><span>@@ -491,18 +493,18 @@</span><br><span> </span><br><span>    /* Do nothing if the current mode matches required */</span><br><span>        if (ts->mf_layout->chan_config != ch_config)</span><br><span style="color: hsl(0, 100%, 40%);">-              rc = sched_trx_configure_ts(l1l->trx, 0, ch_config);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = sched_trx_configure_ts(trxcon->trx, 0, ch_config);</span><br><span> </span><br><span>       /* Confirm reconfiguration */</span><br><span>        if (!rc)</span><br><span style="color: hsl(0, 100%, 40%);">-                rc = l1ctl_tx_ccch_mode_conf(l1l, req->ccch_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+         rc = l1ctl_tx_ccch_mode_conf(trxcon->l1l, req->ccch_mode);</span><br><span> </span><br><span> exit:</span><br><span>        msgb_free(msg);</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_rach_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_rach_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>   struct l1ctl_rach_req *req;</span><br><span>  struct l1ctl_info_ul *ul;</span><br><span>@@ -529,7 +531,7 @@</span><br><span>              "(offset=%u ra=0x%02x)\n", req->offset, req->ra);</span><br><span> </span><br><span>        /* Init a new primitive */</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = sched_prim_init(l1l->trx, &prim, len, chan_nr, link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = sched_prim_init(trxcon->trx, &prim, len, chan_nr, link_id);</span><br><span>      if (rc)</span><br><span>              goto exit;</span><br><span> </span><br><span>@@ -539,7 +541,7 @@</span><br><span>          * FIXME: what if requested TS is not configured?</span><br><span>     * Or what if one (such as TCH) has no TRXC_RACH slots?</span><br><span>       */</span><br><span style="color: hsl(0, 100%, 40%);">-     rc = sched_prim_push(l1l->trx, prim, chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = sched_prim_push(trxcon->trx, prim, chan_nr);</span><br><span>         if (rc) {</span><br><span>            talloc_free(prim);</span><br><span>           goto exit;</span><br><span>@@ -553,7 +555,7 @@</span><br><span>     return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_proc_est_req_h0(struct trx_instance *trx, struct l1ctl_h0 *h)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_proc_est_req_h0(struct trxcon_inst *trxcon, struct l1ctl_h0 *h)</span><br><span> {</span><br><span>     uint16_t band_arfcn;</span><br><span>         int rc = 0;</span><br><span>@@ -564,22 +566,22 @@</span><br><span>          "ARFCN=%u channel\n", band_arfcn &~ ARFCN_FLAG_MASK);</span><br><span> </span><br><span>      /* Do we need to retune? */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (trx->band_arfcn == band_arfcn)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trxcon->trx->band_arfcn == band_arfcn)</span><br><span>             return 0;</span><br><span> </span><br><span>        /* Tune transceiver to required ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-        rc |= trx_if_cmd_rxtune(trx, band_arfcn);</span><br><span style="color: hsl(0, 100%, 40%);">-       rc |= trx_if_cmd_txtune(trx, band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+     rc |= trx_if_cmd_rxtune(trxcon->trx, band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+  rc |= trx_if_cmd_txtune(trxcon->trx, band_arfcn);</span><br><span>         if (rc)</span><br><span>              return rc;</span><br><span> </span><br><span>       /* Update current ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-      trx->band_arfcn = band_arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+      trxcon->trx->band_arfcn = band_arfcn;</span><br><span> </span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_proc_est_req_h1(struct trx_instance *trx, struct l1ctl_h1 *h)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_proc_est_req_h1(struct trxcon_inst *trxcon, struct l1ctl_h1 *h)</span><br><span> {</span><br><span>      int rc;</span><br><span> </span><br><span>@@ -594,7 +596,7 @@</span><br><span>    }</span><br><span> </span><br><span>        /* Forward hopping parameters to TRX */</span><br><span style="color: hsl(0, 100%, 40%);">- rc = trx_if_cmd_setfh(trx, h->hsn, h->maio, h->ma, h->n);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = trx_if_cmd_setfh(trxcon->trx, h->hsn, h->maio, h->ma, h->n);</span><br><span>     if (rc)</span><br><span>              return rc;</span><br><span> </span><br><span>@@ -605,7 +607,7 @@</span><br><span>         return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_dm_est_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_dm_est_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>        enum gsm_phys_chan_config config;</span><br><span>    struct l1ctl_dm_est_req *est_req;</span><br><span>@@ -626,14 +628,14 @@</span><br><span> </span><br><span>        /* Frequency hopping? */</span><br><span>     if (est_req->h)</span><br><span style="color: hsl(0, 100%, 40%);">-              rc = l1ctl_proc_est_req_h1(l1l->trx, &est_req->h1);</span><br><span style="color: hsl(120, 100%, 40%);">+         rc = l1ctl_proc_est_req_h1(trxcon, &est_req->h1);</span><br><span>     else /* Single ARFCN */</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = l1ctl_proc_est_req_h0(l1l->trx, &est_req->h0);</span><br><span style="color: hsl(120, 100%, 40%);">+         rc = l1ctl_proc_est_req_h0(trxcon, &est_req->h0);</span><br><span>     if (rc)</span><br><span>              goto exit;</span><br><span> </span><br><span>       /* Update TSC (Training Sequence Code) */</span><br><span style="color: hsl(0, 100%, 40%);">-       l1l->trx->tsc = est_req->tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+        trxcon->trx->tsc = est_req->tsc;</span><br><span> </span><br><span>        /* Determine channel config */</span><br><span>       config = sched_trx_chan_nr2pchan_config(chan_nr);</span><br><span>@@ -644,8 +646,8 @@</span><br><span>      }</span><br><span> </span><br><span>        /* Configure requested TS */</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = sched_trx_configure_ts(l1l->trx, tn, config);</span><br><span style="color: hsl(0, 100%, 40%);">-   ts = l1l->trx->ts_list[tn];</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = sched_trx_configure_ts(trxcon->trx, tn, config);</span><br><span style="color: hsl(120, 100%, 40%);">+      ts = trxcon->trx->ts_list[tn];</span><br><span>         if (rc) {</span><br><span>            rc = -EINVAL;</span><br><span>                goto exit;</span><br><span>@@ -667,13 +669,13 @@</span><br><span>   return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_dm_rel_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_dm_rel_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>       LOGP(DL1C, LOGL_NOTICE, "Received L1CTL_DM_REL_REQ, "</span><br><span>              "switching back to CCCH\n");</span><br><span> </span><br><span>   /* Reset scheduler */</span><br><span style="color: hsl(0, 100%, 40%);">-   sched_trx_reset(l1l->trx, false);</span><br><span style="color: hsl(120, 100%, 40%);">+  sched_trx_reset(trxcon->trx, false);</span><br><span> </span><br><span>  msgb_free(msg);</span><br><span>      return 0;</span><br><span>@@ -682,7 +684,7 @@</span><br><span> /**</span><br><span>  * Handles both L1CTL_DATA_REQ and L1CTL_TRAFFIC_REQ.</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_dt_req(struct l1ctl_link *l1l,</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_dt_req(struct trxcon_inst *trxcon,</span><br><span>     struct msgb *msg, bool traffic)</span><br><span> {</span><br><span>         struct l1ctl_info_ul *ul;</span><br><span>@@ -707,13 +709,13 @@</span><br><span>            chan_nr, link_id, payload_len);</span><br><span> </span><br><span>  /* Init a new primitive */</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = sched_prim_init(l1l->trx, &prim, payload_len,</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = sched_prim_init(trxcon->trx, &prim, payload_len,</span><br><span>                 chan_nr, link_id);</span><br><span>   if (rc)</span><br><span>              goto exit;</span><br><span> </span><br><span>       /* Push this primitive to transmit queue */</span><br><span style="color: hsl(0, 100%, 40%);">-     rc = sched_prim_push(l1l->trx, prim, chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = sched_prim_push(trxcon->trx, prim, chan_nr);</span><br><span>         if (rc) {</span><br><span>            talloc_free(prim);</span><br><span>           goto exit;</span><br><span>@@ -727,7 +729,7 @@</span><br><span>     return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_param_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_param_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>         struct l1ctl_par_req *par_req;</span><br><span>       struct l1ctl_info_ul *ul;</span><br><span>@@ -739,18 +741,18 @@</span><br><span>            "(ta=%d, tx_power=%u)\n", par_req->ta, par_req->tx_power);</span><br><span> </span><br><span>       /* Instruct TRX to use new TA value */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (l1l->trx->ta != par_req->ta) {</span><br><span style="color: hsl(0, 100%, 40%);">-             trx_if_cmd_setta(l1l->trx, par_req->ta);</span><br><span style="color: hsl(0, 100%, 40%);">-          l1l->trx->ta = par_req->ta;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (trxcon->trx->ta != par_req->ta) {</span><br><span style="color: hsl(120, 100%, 40%);">+                trx_if_cmd_setta(trxcon->trx, par_req->ta);</span><br><span style="color: hsl(120, 100%, 40%);">+             trxcon->trx->ta = par_req->ta;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   l1l->trx->tx_power = par_req->tx_power;</span><br><span style="color: hsl(120, 100%, 40%);">+      trxcon->trx->tx_power = par_req->tx_power;</span><br><span> </span><br><span>      msgb_free(msg);</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_tch_mode_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_tch_mode_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>    struct l1ctl_tch_mode_req *req;</span><br><span>      struct trx_lchan_state *lchan;</span><br><span>@@ -765,7 +767,7 @@</span><br><span>         /* Iterate over timeslot list */</span><br><span>     for (i = 0; i < TRX_TS_COUNT; i++) {</span><br><span>              /* Timeslot is not allocated */</span><br><span style="color: hsl(0, 100%, 40%);">-         ts = l1l->trx->ts_list[i];</span><br><span style="color: hsl(120, 100%, 40%);">+              ts = trxcon->trx->ts_list[i];</span><br><span>          if (ts == NULL)</span><br><span>                      continue;</span><br><span> </span><br><span>@@ -790,7 +792,7 @@</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int l1ctl_rx_crypto_req(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1ctl_rx_crypto_req(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>        struct l1ctl_crypto_req *req;</span><br><span>        struct l1ctl_info_ul *ul;</span><br><span>@@ -808,7 +810,7 @@</span><br><span>      tn = ul->chan_nr & 0x7;</span><br><span> </span><br><span>   /* Make sure that required TS is allocated and configured */</span><br><span style="color: hsl(0, 100%, 40%);">-    ts = l1l->trx->ts_list[tn];</span><br><span style="color: hsl(120, 100%, 40%);">+     ts = trxcon->trx->ts_list[tn];</span><br><span>         if (ts == NULL || ts->mf_layout == NULL) {</span><br><span>                LOGP(DL1C, LOGL_ERROR, "TS %u is not configured\n", tn);</span><br><span>           rc = -EINVAL;</span><br><span>@@ -828,7 +830,7 @@</span><br><span>  return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int l1ctl_rx_cb(struct l1ctl_link *l1l, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+int l1ctl_rx_cb(struct trxcon_inst *trxcon, struct msgb *msg)</span><br><span> {</span><br><span>     struct l1ctl_hdr *l1h;</span><br><span> </span><br><span>@@ -837,31 +839,31 @@</span><br><span> </span><br><span>       switch (l1h->msg_type) {</span><br><span>  case L1CTL_FBSB_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-            return l1ctl_rx_fbsb_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+           return l1ctl_rx_fbsb_req(trxcon, msg);</span><br><span>       case L1CTL_PM_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-              return l1ctl_rx_pm_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+             return l1ctl_rx_pm_req(trxcon, msg);</span><br><span>         case L1CTL_RESET_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-           return l1ctl_rx_reset_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          return l1ctl_rx_reset_req(trxcon, msg);</span><br><span>      case L1CTL_ECHO_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-            return l1ctl_rx_echo_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+           return l1ctl_rx_echo_req(trxcon, msg);</span><br><span>       case L1CTL_CCCH_MODE_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-               return l1ctl_rx_ccch_mode_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return l1ctl_rx_ccch_mode_req(trxcon, msg);</span><br><span>  case L1CTL_RACH_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-            return l1ctl_rx_rach_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+           return l1ctl_rx_rach_req(trxcon, msg);</span><br><span>       case L1CTL_DM_EST_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-          return l1ctl_rx_dm_est_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+         return l1ctl_rx_dm_est_req(trxcon, msg);</span><br><span>     case L1CTL_DM_REL_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-          return l1ctl_rx_dm_rel_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+         return l1ctl_rx_dm_rel_req(trxcon, msg);</span><br><span>     case L1CTL_DATA_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-            return l1ctl_rx_dt_req(l1l, msg, false);</span><br><span style="color: hsl(120, 100%, 40%);">+              return l1ctl_rx_dt_req(trxcon, msg, false);</span><br><span>  case L1CTL_TRAFFIC_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-         return l1ctl_rx_dt_req(l1l, msg, true);</span><br><span style="color: hsl(120, 100%, 40%);">+               return l1ctl_rx_dt_req(trxcon, msg, true);</span><br><span>   case L1CTL_PARAM_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-           return l1ctl_rx_param_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          return l1ctl_rx_param_req(trxcon, msg);</span><br><span>      case L1CTL_TCH_MODE_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-                return l1ctl_rx_tch_mode_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+               return l1ctl_rx_tch_mode_req(trxcon, msg);</span><br><span>   case L1CTL_CRYPTO_REQ:</span><br><span style="color: hsl(0, 100%, 40%);">-          return l1ctl_rx_crypto_req(l1l, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+         return l1ctl_rx_crypto_req(trxcon, msg);</span><br><span> </span><br><span>         /* Not (yet) handled messages */</span><br><span>     case L1CTL_NEIGH_PM_REQ:</span><br><span>diff --git a/src/host/trxcon/l1ctl.h b/src/host/trxcon/l1ctl.h</span><br><span>index ca8c0be..76b49e3 100644</span><br><span>--- a/src/host/trxcon/l1ctl.h</span><br><span>+++ b/src/host/trxcon/l1ctl.h</span><br><span>@@ -3,11 +3,12 @@</span><br><span> #include <stdint.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "trxcon.h"</span><br><span> #include "l1ctl_link.h"</span><br><span> #include "l1ctl_proto.h"</span><br><span> </span><br><span> /* Event handlers */</span><br><span style="color: hsl(0, 100%, 40%);">-int l1ctl_rx_cb(struct l1ctl_link *l1l, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+int l1ctl_rx_cb(struct trxcon_inst *trxcon, struct msgb *msg);</span><br><span> void l1ctl_shutdown_cb(struct l1ctl_link *l1l);</span><br><span> </span><br><span> int l1ctl_tx_fbsb_conf(struct l1ctl_link *l1l, uint8_t result,</span><br><span>diff --git a/src/host/trxcon/trxcon_fsm.c b/src/host/trxcon/trxcon_fsm.c</span><br><span>index f90f88b..4e9473d 100644</span><br><span>--- a/src/host/trxcon/trxcon_fsm.c</span><br><span>+++ b/src/host/trxcon/trxcon_fsm.c</span><br><span>@@ -58,7 +58,7 @@</span><br><span>             break;</span><br><span>       case TRXCON_EV_L1CTL_REQ:</span><br><span>            OSMO_ASSERT(data != NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-              l1ctl_rx_cb(trxcon->l1l, (struct msgb *) data);</span><br><span style="color: hsl(120, 100%, 40%);">+            l1ctl_rx_cb(trxcon, (struct msgb *) data);</span><br><span>           break;</span><br><span>       default:</span><br><span>             LOGPFSML(fi, LOGL_ERROR, "Unhandled event '%s'\n",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12612">change 12612</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/12612"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I4e59f547a165b30aa9538ae8f9d6bd822067315b </div>
<div style="display:none"> Gerrit-Change-Number: 12612 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>