aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-01-25 15:10:33 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2021-01-25 16:19:37 +0100
commit201da4e5b2b430d4a63bdf62b47e28065cceb8f4 (patch)
tree29b4ab8998b806a1b6ea187dde7a8db52bd9ecac /src
parent7bb8cd683ca317726b26e79caf2b54008a853fbb (diff)
ms: Properly handle EGPRS_GMSK mode in ms_max_cs_dl/ul()
Diffstat (limited to 'src')
-rw-r--r--src/gprs_ms.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index f157d131..0c4db899 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -632,6 +632,7 @@ void ms_update_error_rate(struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf, int er
enum CodingScheme ms_max_cs_ul(const struct GprsMs *ms)
{
+ enum CodingScheme cs;
OSMO_ASSERT(ms->bts != NULL);
if (mcs_is_gprs(ms->current_cs_ul)) {
@@ -642,15 +643,10 @@ enum CodingScheme ms_max_cs_ul(const struct GprsMs *ms)
return mcs_get_gprs_by_num(bts_max_cs_ul(ms->bts));
}
- if (!mcs_is_edge(ms->current_cs_ul))
- return UNKNOWN;
-
- if (bts_max_mcs_ul(ms->bts))
- return mcs_get_egprs_by_num(bts_max_mcs_ul(ms->bts));
- else if (bts_max_cs_ul(ms->bts))
- return mcs_get_gprs_by_num(bts_max_cs_ul(ms->bts));
-
- return MCS4;
+ cs = mcs_get_egprs_by_num(bts_max_mcs_ul(ms->bts));
+ if (ms_mode(ms) == EGPRS_GMSK && cs > MCS4)
+ cs = MCS4;
+ return cs;
}
void ms_set_current_cs_dl(struct GprsMs *ms, enum CodingScheme scheme)
@@ -660,6 +656,7 @@ void ms_set_current_cs_dl(struct GprsMs *ms, enum CodingScheme scheme)
enum CodingScheme ms_max_cs_dl(const struct GprsMs *ms)
{
+ enum CodingScheme cs;
OSMO_ASSERT(ms->bts != NULL);
if (mcs_is_gprs(ms->current_cs_dl)) {
@@ -670,15 +667,10 @@ enum CodingScheme ms_max_cs_dl(const struct GprsMs *ms)
return mcs_get_gprs_by_num(bts_max_cs_dl(ms->bts));
}
- if (!mcs_is_edge(ms->current_cs_dl))
- return UNKNOWN;
-
- if (bts_max_mcs_dl(ms->bts))
- return mcs_get_egprs_by_num(bts_max_mcs_dl(ms->bts));
- else if (bts_max_cs_dl(ms->bts))
- return mcs_get_gprs_by_num(bts_max_cs_dl(ms->bts));
-
- return MCS4;
+ cs = mcs_get_egprs_by_num(bts_max_mcs_dl(ms->bts));
+ if (ms_mode(ms) == EGPRS_GMSK && cs > MCS4)
+ cs = MCS4;
+ return cs;
}
void ms_update_cs_ul(struct GprsMs *ms, const struct pcu_l1_meas *meas)