aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-10-30 18:46:24 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2020-11-04 21:39:43 +0100
commit87eec1fd744a2d55f01fd9b346a61aeae46dca80 (patch)
treebcc7ec9008faee07cc31c77ebf74a8553a622c84
parent133fe4a852b9b6d153001c169c80e736900c9448 (diff)
Get rid of bts->egprs_enabled
BTS simply notifies the PCU about the supported MCS, and PCU is responsible for providing correct data formatting supported for the BTS and the target MS. Related: OS#4544 Change-Id: Ifcf23771bd23afc64ca6fea38948f98f2d134ecb
-rw-r--r--src/bts.h1
-rw-r--r--src/gprs_bssgp_pcu.cpp22
-rw-r--r--src/pcu_l1_if.cpp6
-rw-r--r--tests/edge/EdgeTest.cpp1
-rw-r--r--tests/tbf/TbfTest.cpp12
-rw-r--r--tests/types/TypesTest.cpp1
6 files changed, 17 insertions, 26 deletions
diff --git a/src/bts.h b/src/bts.h
index 6a2d3b01..9f2f8985 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -137,7 +137,6 @@ struct gprs_rlcmac_bts {
uint8_t force_two_phase;
uint8_t alpha, gamma;
- bool egprs_enabled;
bool dl_tbf_preemptive_retransmission;
uint8_t si13[GSM_MACBLOCK_LEN];
bool si13_is_set;
diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp
index f87681c3..48652114 100644
--- a/src/gprs_bssgp_pcu.cpp
+++ b/src/gprs_bssgp_pcu.cpp
@@ -740,18 +740,23 @@ static enum CodingScheme max_coding_scheme_dl(struct gprs_rlcmac_bts *bts)
{
int num = 0;
int i;
+ bool mcs_any = false;
+
+ /* First check if we support any MCS: */
+ for (i = 8; i >= 0; i--) {
+ if (bts->mcs_mask & (1 << i)) {
+ num = i + 1;
+ mcs_any = true;
+ break;
+ }
+ }
- if (bts->egprs_enabled) {
+ if (mcs_any) {
if (!bts->cs_adj_enabled) {
if (bts->initial_mcs_dl) {
num = bts->initial_mcs_dl;
} else {
- for (i = 8; i >= 0; i--) {
- if (bts->mcs_mask & (1 << i)) {
- num = i + 1;
- break;
- }
- }
+ /* We found "num" for free in the loop above */
}
} else if (bts->bts->max_mcs_dl()) {
num = bts->bts->max_mcs_dl();
@@ -808,6 +813,9 @@ static int gprs_bssgp_tx_fc_bvc(void)
ms_bucket_size = bts->fc_ms_bucket_size;
ms_leak_rate = bts->fc_ms_leak_rate;
+ /* FIXME: This calculation is mostly wrong. It should be done based on
+ currently established TBF (and whether the related (egprs)_ms_class
+ as per which CS/MCS they support). */
if (leak_rate == 0) {
int meas_rate;
int usage; /* in 0..1000 */
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 127029bf..738d0f17 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -623,15 +623,13 @@ bssgp_failed:
}
bts_set_max_cs(bts, bts->vty.max_cs_dl, bts->vty.max_cs_ul); /* recalc max CS values */
- bts->egprs_enabled = false;
bts->mcs_mask = 0;
for (i = 0; i < 9; i++) {
uint8_t allowed = !!(info_ind->flags & (PCU_IF_FLAG_MCS1 << i));
bts->mcs_mask |= allowed << i;
- if (allowed) {
- bts->egprs_enabled = true;
+ if (allowed)
LOGP(DL1IF, LOGL_DEBUG, " Use MCS%d\n", i + 1);
- }
+
}
bts_set_max_mcs(bts, bts->vty.max_mcs_dl, bts->vty.max_mcs_ul); /* recalc max MCS values */
diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp
index 5845f4dd..67ed2a73 100644
--- a/tests/edge/EdgeTest.cpp
+++ b/tests/edge/EdgeTest.cpp
@@ -1157,7 +1157,6 @@ static void setup_bts(BTS *the_bts, uint8_t ts_no, uint8_t cs = 1)
gprs_rlcmac_trx *trx;
bts = the_bts->bts_data();
- bts->egprs_enabled = true;
bts->alloc_algorithm = alloc_algorithm_a;
bts->initial_cs_dl = cs;
bts->initial_cs_ul = cs;
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index 40b7b9cb..505f510f 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -1737,7 +1737,6 @@ static void test_tbf_egprs_two_phase_puan(void)
setup_bts(&the_bts, ts_no, 4);
the_bts.bts_data()->initial_mcs_dl = 9;
- the_bts.bts_data()->egprs_enabled = true;
bts = the_bts.bts_data();
bts->ws_base = 128;
bts->ws_pdch = 64;
@@ -2177,7 +2176,6 @@ static void test_tbf_gprs_egprs()
setup_bts(&the_bts, ts_no);
/* EGPRS-only */
- bts->egprs_enabled = true;
gprs_bssgp_init(bts, 3234, 3234, 1, 1, false, 0, 0, 0);
@@ -2257,7 +2255,6 @@ static void test_tbf_ws()
ws_check(dl_tbf, __func__, 4, 64, true, false);
/* EGPRS-only */
- bts->egprs_enabled = true;
/* Does support EGPRS */
ms = the_bts.ms_alloc(ms_class, ms_class);
@@ -2297,7 +2294,6 @@ static void test_tbf_update_ws(void)
gprs_bssgp_init(bts, 5234, 5234, 1, 1, false, 0, 0, 0);
/* EGPRS-only */
- bts->egprs_enabled = true;
/* Does support EGPRS */
ms = the_bts.ms_alloc(ms_class, ms_class);
@@ -2330,7 +2326,6 @@ static void test_tbf_puan_urbb_len(void)
setup_bts(&the_bts, ts_no, 4);
the_bts.bts_data()->initial_mcs_dl = 9;
- the_bts.bts_data()->egprs_enabled = true;
ul_tbf = puan_urbb_len_issue(&the_bts, ts_no, tlli, &fn, qta,
ms_class, egprs_ms_class);
@@ -2471,7 +2466,6 @@ static void test_tbf_li_decoding(void)
setup_bts(&the_bts, ts_no, 4);
the_bts.bts_data()->initial_mcs_dl = 9;
- the_bts.bts_data()->egprs_enabled = true;
ul_tbf = tbf_li_decoding(&the_bts, ts_no, tlli, &fn, qta,
ms_class, egprs_ms_class);
@@ -2515,7 +2509,6 @@ static void test_tbf_epdan_out_of_rx_window(void)
setup_bts(&the_bts, ts_no);
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
- bts->egprs_enabled = true;
/* ARQ II */
bts->dl_arq_type = EGPRS_ARQ2;
@@ -2599,7 +2592,6 @@ static void test_tbf_egprs_two_phase_spb(void)
setup_bts(&the_bts, ts_no, 4);
the_bts.bts_data()->initial_mcs_dl = 9;
- the_bts.bts_data()->egprs_enabled = true;
ul_tbf = establish_ul_tbf_two_phase_spb(&the_bts, ts_no, tlli, &fn, qta,
ms_class, egprs_ms_class);
@@ -2629,7 +2621,6 @@ static void test_tbf_egprs_two_phase()
setup_bts(&the_bts, ts_no, 4);
the_bts.bts_data()->initial_mcs_dl = 9;
- the_bts.bts_data()->egprs_enabled = true;
ul_tbf = establish_ul_tbf_two_phase(&the_bts, ts_no, tlli, &fn, qta,
ms_class, egprs_ms_class);
@@ -3054,7 +3045,6 @@ static void test_tbf_egprs_retx_dl(void)
bts->cs_downgrade_threshold = 0;
setup_bts(&the_bts, ts_no);
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
- bts->egprs_enabled = true;
/* ARQ II */
bts->dl_arq_type = EGPRS_ARQ2;
@@ -3083,7 +3073,6 @@ static void test_tbf_egprs_spb_dl(void)
bts->cs_downgrade_threshold = 0;
setup_bts(&the_bts, ts_no);
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
- bts->egprs_enabled = true;
/* ARQ I resegmentation support */
bts->dl_arq_type = EGPRS_ARQ1;
@@ -3115,7 +3104,6 @@ static void test_tbf_egprs_dl()
setup_bts(&the_bts, ts_no);
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
- bts->egprs_enabled = true;
/* ARQ II */
bts->dl_arq_type = EGPRS_ARQ2;
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index eeebc70b..feccf42c 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -670,7 +670,6 @@ static void test_egprs_ul_ack_nack()
fprintf(stderr, "############## test_egprs_ul_ack_nack\n");
BTS the_bts;
- the_bts.bts_data()->egprs_enabled = true;
the_bts.bts_data()->alloc_algorithm = alloc_algorithm_a;
the_bts.bts_data()->trx[0].pdch[4].enable();