diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-06-29 12:20:28 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2021-07-05 08:03:08 +0000 |
commit | ae783bcb0e74a74e8bdd3453a2c681a4aadadda3 (patch) | |
tree | bcc848270c740118f0cf446779b121c7a1ddbeb2 | |
parent | a4b90739898a9cf652c8365518b87b01806d5e9c (diff) |
Support SDCCH8 in osmo dyn ts
Change-Id: Id541dee6c224d2b8d97c07b916085883354cecbc
-rw-r--r-- | src/common/bts.c | 1 | ||||
-rw-r--r-- | src/common/gsm_data.c | 3 | ||||
-rw-r--r-- | src/common/rsl.c | 21 |
3 files changed, 19 insertions, 6 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index 09d9b88a..d2226997 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -372,6 +372,7 @@ int bts_init(struct gsm_bts *bts) osmo_bts_set_feature(bts->features, BTS_FEAT_ETWS_PN); osmo_bts_set_feature(bts->features, BTS_FEAT_IPV6_NSVC); osmo_bts_set_feature(bts->features, BTS_FEAT_ABIS_OSMO_PCU); + osmo_bts_set_feature(bts->features, BTS_FEAT_DYN_TS_SDCCH8); rc = bts_model_init(bts); if (rc < 0) { diff --git a/src/common/gsm_data.c b/src/common/gsm_data.c index a6b0d7e5..ecc4308b 100644 --- a/src/common/gsm_data.c +++ b/src/common/gsm_data.c @@ -382,7 +382,8 @@ struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(7): lch_idx = cbits & 0x7; /* SDCCH/8 */ if (ts->pchan != GSM_PCHAN_SDCCH8_SACCH8C && - ts->pchan != GSM_PCHAN_SDCCH8_SACCH8C_CBCH) + ts->pchan != GSM_PCHAN_SDCCH8_SACCH8C_CBCH && + ts->pchan != GSM_PCHAN_OSMO_DYN) ok = false; break; case ABIS_RSL_CHAN_NR_CBITS_BCCH: diff --git a/src/common/rsl.c b/src/common/rsl.c index 8043f989..57a95a15 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -1425,6 +1425,7 @@ static int dyn_ts_l1_reconnect(struct gsm_bts_trx_ts *ts, struct msgb *msg) switch (ts->dyn.pchan_want) { case GSM_PCHAN_TCH_F: case GSM_PCHAN_TCH_H: + case GSM_PCHAN_SDCCH8_SACCH8C: break; case GSM_PCHAN_PDCH: /* Only the first lchan matters for PDCH */ @@ -1448,14 +1449,23 @@ static int dyn_ts_l1_reconnect(struct gsm_bts_trx_ts *ts, struct msgb *msg) static enum gsm_phys_chan_config dyn_pchan_from_chan_nr(uint8_t chan_nr) { - uint8_t cbits = chan_nr & RSL_CHAN_NR_MASK; + uint8_t cbits = chan_nr >> 3; switch (cbits) { - case RSL_CHAN_Bm_ACCHs: + case ABIS_RSL_CHAN_NR_CBITS_Bm_ACCHs: return GSM_PCHAN_TCH_F; - case RSL_CHAN_Lm_ACCHs: - case (RSL_CHAN_Lm_ACCHs + RSL_CHAN_NR_1): + case ABIS_RSL_CHAN_NR_CBITS_Lm_ACCHs(0): + case ABIS_RSL_CHAN_NR_CBITS_Lm_ACCHs(1): return GSM_PCHAN_TCH_H; - case RSL_CHAN_OSMO_PDCH: + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(0): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(1): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(2): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(3): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(4): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(5): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(6): + case ABIS_RSL_CHAN_NR_CBITS_SDCCH8_ACCH(7): + return GSM_PCHAN_SDCCH8_SACCH8C; + case ABIS_RSL_CHAN_NR_CBITS_OSMO_PDCH: return GSM_PCHAN_PDCH; default: LOGP(DRSL, LOGL_ERROR, @@ -3009,6 +3019,7 @@ static void osmo_dyn_ts_disconnected(struct gsm_bts_trx_ts *ts) switch (ts->dyn.pchan_want) { case GSM_PCHAN_TCH_F: case GSM_PCHAN_TCH_H: + case GSM_PCHAN_SDCCH8_SACCH8C: case GSM_PCHAN_PDCH: break; default: |