aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-02-23 13:11:14 +0100
committerHarald Welte <laforge@gnumonks.org>2018-02-23 14:27:33 +0000
commita38deee5f1b714336cec253a730a6e3c254c64d2 (patch)
tree2c01e31314a31451fbf7e02cecf00e0d2ab3342f
parent232f53adf0e7ea3211bdfe60f7c3b629a9648fa1 (diff)
scheduler.c: Factor out find_sched_mframe_idx() function
Let's split the look-up of the multiframe scheduler from the asignment to a given l1ts in trx_sched_set_pchan. Related: OS#2978 Change-Id: I79548b25aae647ce993a9d83c771d22b08cb1c74
-rw-r--r--src/common/scheduler.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
index efd76660..41b5d7af 100644
--- a/src/common/scheduler.c
+++ b/src/common/scheduler.c
@@ -1327,31 +1327,38 @@ static const struct trx_sched_multiframe trx_sched_multiframes[] = {
* scheduler functions
*/
-/* set multiframe scheduler to given pchan */
-int trx_sched_set_pchan(struct l1sched_trx *l1t, uint8_t tn,
- enum gsm_phys_chan_config pchan)
+static int find_sched_mframe_idx(enum gsm_phys_chan_config pchan, uint8_t tn)
{
- struct l1sched_ts *l1ts = l1sched_trx_get_ts(l1t, tn);
int i;
for (i = 0; i < ARRAY_SIZE(trx_sched_multiframes); i++) {
if (trx_sched_multiframes[i].pchan == pchan
&& (trx_sched_multiframes[i].slotmask & (1 << tn))) {
- l1ts->mf_index = i;
- l1ts->mf_period = trx_sched_multiframes[i].period;
- l1ts->mf_frames = trx_sched_multiframes[i].frames;
- LOGP(DL1C, LOGL_NOTICE, "Configuring multiframe with "
- "%s trx=%d ts=%d\n",
- trx_sched_multiframes[i].name,
- l1t->trx->nr, tn);
- return 0;
+ return i;
}
}
+ return -1;
+}
- LOGP(DL1C, LOGL_NOTICE, "Failed to configure multiframe "
- "trx=%d ts=%d\n", l1t->trx->nr, tn);
+/* set multiframe scheduler to given pchan */
+int trx_sched_set_pchan(struct l1sched_trx *l1t, uint8_t tn,
+ enum gsm_phys_chan_config pchan)
+{
+ struct l1sched_ts *l1ts = l1sched_trx_get_ts(l1t, tn);
+ int i;
- return -ENOTSUP;
+ i = find_sched_mframe_idx(pchan, tn);
+ if (i < 0) {
+ LOGP(DL1C, LOGL_NOTICE, "Failed to configure multiframe "
+ "trx=%d ts=%d\n", l1t->trx->nr, tn);
+ return -ENOTSUP;
+ }
+ l1ts->mf_index = i;
+ l1ts->mf_period = trx_sched_multiframes[i].period;
+ l1ts->mf_frames = trx_sched_multiframes[i].frames;
+ LOGP(DL1C, LOGL_NOTICE, "Configuring multiframe with %s trx=%d ts=%d\n",
+ trx_sched_multiframes[i].name, l1t->trx->nr, tn);
+ return 0;
}
/* setting all logical channels given attributes to active/inactive */