From 7a5614f171c793850c120e842bfdc5faf4a57e25 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Thu, 23 Feb 2023 11:59:43 +0100 Subject: [PATCH] lchan.h: remove enum lchan_csd_mode It looks like the idea was to translate the CSD rate from BSSAP to lchan_csd_mode before translating it to RSL. But instead we can just directly translate the BSSAP value to the RSL value. The previous code was not used yet (nothing wrote to csd_mode). Related: OS#4393 Depends: libosmocore I25bfd02aa1428a35492b20376a31635a442e545f Change-Id: Ice914744da3a2084e82d125848fb69404b8e8a36 --- include/osmocom/bsc/lchan.h | 19 +++++-------- src/osmo-bsc/abis_rsl.c | 54 +++++-------------------------------- 2 files changed, 12 insertions(+), 61 deletions(-) diff --git a/include/osmocom/bsc/lchan.h b/include/osmocom/bsc/lchan.h index 4fcfa2026..eef314000 100644 --- a/include/osmocom/bsc/lchan.h +++ b/include/osmocom/bsc/lchan.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -44,24 +45,16 @@ enum channel_rate { enum channel_rate chan_t_to_chan_rate(enum gsm_chan_t chan_t); -enum lchan_csd_mode { - LCHAN_CSD_M_NT, - LCHAN_CSD_M_T_1200_75, - LCHAN_CSD_M_T_600, - LCHAN_CSD_M_T_1200, - LCHAN_CSD_M_T_2400, - LCHAN_CSD_M_T_9600, - LCHAN_CSD_M_T_14400, - LCHAN_CSD_M_T_29000, - LCHAN_CSD_M_T_32000, -}; - struct channel_mode_and_rate { enum gsm48_chan_mode chan_mode; enum channel_rate chan_rate; uint16_t s15_s0; /* only used for GSM48_CMODE_DATA_* */ - enum lchan_csd_mode csd_mode; + bool data_transparent; + union { + enum rsl_cmod_csd_t t; + enum rsl_cmod_csd_nt nt; + } data_rate; }; /* Channel Request reason */ diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index ee2e2d392..e4a2e9ebe 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -460,54 +460,12 @@ static int channel_mode_from_lchan(struct rsl_ie_chan_mode *cm, case GSM48_CMODE_DATA_14k5: case GSM48_CMODE_DATA_12k0: case GSM48_CMODE_DATA_6k0: - switch (ch_mode_rate->csd_mode) { - case LCHAN_CSD_M_NT: - /* non-transparent CSD with RLP */ - switch (ch_mode_rate->chan_mode) { - case GSM48_CMODE_DATA_14k5: - cm->chan_rate = RSL_CMOD_SP_NT_14k5; - break; - case GSM48_CMODE_DATA_12k0: - cm->chan_rate = RSL_CMOD_SP_NT_12k0; - break; - case GSM48_CMODE_DATA_6k0: - cm->chan_rate = RSL_CMOD_SP_NT_6k0; - break; - default: - LOGP(DRSL, LOGL_ERROR, - "unsupported lchan->tch_mode %u\n", - ch_mode_rate->chan_mode); - return -EINVAL; - } - break; - /* transparent data services below */ - case LCHAN_CSD_M_T_1200_75: - cm->chan_rate = RSL_CMOD_CSD_T_1200_75; - break; - case LCHAN_CSD_M_T_600: - cm->chan_rate = RSL_CMOD_CSD_T_600; - break; - case LCHAN_CSD_M_T_1200: - cm->chan_rate = RSL_CMOD_CSD_T_1200; - break; - case LCHAN_CSD_M_T_2400: - cm->chan_rate = RSL_CMOD_CSD_T_2400; - break; - case LCHAN_CSD_M_T_9600: - cm->chan_rate = RSL_CMOD_CSD_T_9600; - break; - case LCHAN_CSD_M_T_14400: - cm->chan_rate = RSL_CMOD_CSD_T_14400; - break; - case LCHAN_CSD_M_T_29000: - cm->chan_rate = RSL_CMOD_CSD_T_29000; - break; - case LCHAN_CSD_M_T_32000: - cm->chan_rate = RSL_CMOD_CSD_T_32000; - break; - default: - LOGP(DRSL, LOGL_ERROR, "unsupported csd_mode %u\n", ch_mode_rate->csd_mode); - return -EINVAL; + /* 3GPP TS 48.058 ยง 9.3.6 Channel Mode octet 6 */ + if (ch_mode_rate->data_transparent) { + cm->chan_rate = ch_mode_rate->data_rate.t; + } else { + cm->chan_rate = ch_mode_rate->data_rate.nt; + cm->chan_rate |= 0x40; } break; default: