bsc: Add define for ts_as_pchan_for_each_lchan with ts->pchan_on_init

It will be used further in follow-up patches. It also provides a place
to document its (intricate) logic around it and its possible uses.

Change-Id: Ia1d4bdbfca6b9719f54ee609b6bfadf7f3a4bb43
This commit is contained in:
Pau Espin 2018-11-28 16:39:29 +01:00
parent ab9a259cd2
commit 0ba20df9ee
2 changed files with 14 additions and 1 deletions

View File

@ -478,6 +478,19 @@ struct gsm_encr {
*/
#define ts_for_each_lchan(lchan, ts) ts_as_pchan_for_each_lchan(lchan, ts, (ts)->pchan_is)
/* Iterate over all possible lchans available that have an FSM allocated based
* on PCHAN \ref ts (dynamic) configuration.
* Iterate all lchan instances set up by this \ref ts type, including those
* lchans currently disabled or in process of being enabled (e.g. due to dynamic
* timeslot in switchover). Compare ts_for_each_lchan(), which iterates only the
* enabled lchans.
* For example, it is useful in case dynamic timeslot \ref ts is in process of
* switching from configuration PDCH (no lchans) to TCH_F (1 lchan), where
* pchan_is is still set to PDCH but \ref ts may contain already an \ref lchan
* of type TCH_F which initiated the request to switch the \ts configuration.
*/
#define ts_for_each_potential_lchan(lchan, ts) ts_as_pchan_for_each_lchan(lchan, ts, (ts)->pchan_on_init)
enum lchan_activate_mode {
FOR_NONE,
FOR_MS_CHANNEL_REQUEST,

View File

@ -550,7 +550,7 @@ static void ts_fsm_in_use_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
ts->pdch_act_allowed = true;
/* For static TS, check validity. For dyn TS, figure out which PCHAN this should become. */
ts_as_pchan_for_each_lchan(lchan, ts, ts->pchan_on_init) {
ts_for_each_potential_lchan(lchan, ts) {
if (lchan_state_is(lchan, LCHAN_ST_UNUSED))
continue;