aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-06-29 12:20:28 +0200
committerpespin <pespin@sysmocom.de>2021-07-05 08:03:08 +0000
commitae783bcb0e74a74e8bdd3453a2c681a4aadadda3 (patch)
treebcc848270c740118f0cf446779b121c7a1ddbeb2
parenta4b90739898a9cf652c8365518b87b01806d5e9c (diff)
Support SDCCH8 in osmo dyn ts
-rw-r--r--src/common/bts.c1
-rw-r--r--src/common/gsm_data.c3
-rw-r--r--src/common/rsl.c21
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: