<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>