diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-10-30 18:46:24 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-11-04 21:39:43 +0100 |
commit | 87eec1fd744a2d55f01fd9b346a61aeae46dca80 (patch) | |
tree | bcc7ec9008faee07cc31c77ebf74a8553a622c84 | |
parent | 133fe4a852b9b6d153001c169c80e736900c9448 (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.h | 1 | ||||
-rw-r--r-- | src/gprs_bssgp_pcu.cpp | 22 | ||||
-rw-r--r-- | src/pcu_l1_if.cpp | 6 | ||||
-rw-r--r-- | tests/edge/EdgeTest.cpp | 1 | ||||
-rw-r--r-- | tests/tbf/TbfTest.cpp | 12 | ||||
-rw-r--r-- | tests/types/TypesTest.cpp | 1 |
6 files changed, 17 insertions, 26 deletions
@@ -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(); |