diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-02-23 13:11:14 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-02-23 14:27:33 +0000 |
commit | a38deee5f1b714336cec253a730a6e3c254c64d2 (patch) | |
tree | 2c01e31314a31451fbf7e02cecf00e0d2ab3342f | |
parent | 232f53adf0e7ea3211bdfe60f7c3b629a9648fa1 (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.c | 37 |
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 */ |