diff options
author | Max <msuraev@sysmocom.de> | 2019-03-06 19:03:01 +0100 |
---|---|---|
committer | Max <msuraev@sysmocom.de> | 2019-03-06 20:52:15 +0000 |
commit | 8119ecd2db76e5ef8a88ca9b85c8712386991bf7 (patch) | |
tree | efbb4976e3c11cf9f1673f91c8039a31cf361f42 | |
parent | d3a0d91a389931a9348074388722293027d2ac7c (diff) |
Tighten lqual table limits check
Previously MAX_GPRS_CS was used for both EDGE and GPRS which means that
we waste extra memory in GPRS case. It also leads to misleading
name. Let's fix this by introducing separate definitions for GPRS and
EDGE cases and use them as appropriate in limit checks.
Change-Id: I3ae1ee64ec8e80247b8fe669cc79505b4dadf58f
-rw-r--r-- | src/bts.h | 6 | ||||
-rw-r--r-- | src/gprs_ms.cpp | 8 | ||||
-rw-r--r-- | src/pcu_main.cpp | 8 |
3 files changed, 13 insertions, 9 deletions
@@ -45,7 +45,9 @@ extern "C" { #define LLC_CODEL_DISABLE 0 #define LLC_CODEL_USE_DEFAULT (-1) -#define MAX_GPRS_CS 9 + +#define MAX_EDGE_MCS 9 +#define MAX_GPRS_CS 4 /* see bts->gsmtap_categ_mask */ enum pcu_gsmtap_category { @@ -143,7 +145,7 @@ struct gprs_rlcmac_bts { uint8_t cs_adj_upper_limit; uint8_t cs_adj_lower_limit; struct {int16_t low; int16_t high; } cs_lqual_ranges[MAX_GPRS_CS]; - struct {int16_t low; int16_t high; } mcs_lqual_ranges[MAX_GPRS_CS]; + struct {int16_t low; int16_t high; } mcs_lqual_ranges[MAX_EDGE_MCS]; uint16_t cs_downgrade_threshold; /* downgrade if less packets left (DL) */ uint16_t ws_base; uint16_t ws_pdch; /* increase WS by this value per PDCH */ diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index 740ef6b1..87a35d18 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -620,7 +620,7 @@ void GprsMs::update_cs_ul(const pcu_l1_meas *meas) int low; int high; GprsCodingScheme new_cs_ul = m_current_cs_ul; - unsigned current_cs_num = m_current_cs_ul.to_num(); + uint8_t current_cs_num = m_current_cs_ul.to_num(); bts_data = m_bts->bts_data(); @@ -642,11 +642,13 @@ void GprsMs::update_cs_ul(const pcu_l1_meas *meas) old_link_qual = meas->link_qual; if (m_current_cs_ul.isGprs()) { + if (current_cs_num > MAX_GPRS_CS) + current_cs_num = MAX_GPRS_CS; low = bts_data->cs_lqual_ranges[current_cs_num-1].low; high = bts_data->cs_lqual_ranges[current_cs_num-1].high; } else if (m_current_cs_ul.isEgprs()) { - if (current_cs_num > MAX_GPRS_CS) - current_cs_num = MAX_GPRS_CS; + if (current_cs_num > MAX_EDGE_MCS) + current_cs_num = MAX_EDGE_MCS; low = bts_data->mcs_lqual_ranges[current_cs_num-1].low; high = bts_data->mcs_lqual_ranges[current_cs_num-1].high; } else { diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp index fe851600..a0f31d16 100644 --- a/src/pcu_main.cpp +++ b/src/pcu_main.cpp @@ -214,10 +214,10 @@ int main(int argc, char *argv[]) bts->cs_adj_enabled = 1; bts->cs_adj_upper_limit = 33; /* Decrease CS if the error rate is above */ bts->cs_adj_lower_limit = 10; /* Increase CS if the error rate is below */ - bts->max_cs_ul = 4; - bts->max_cs_dl = 4; - bts->max_mcs_ul = MAX_GPRS_CS; - bts->max_mcs_dl = MAX_GPRS_CS; + bts->max_cs_ul = MAX_GPRS_CS; + bts->max_cs_dl = MAX_GPRS_CS; + bts->max_mcs_ul = MAX_EDGE_MCS; + bts->max_mcs_dl = MAX_EDGE_MCS; /* CS-1 to CS-4 */ bts->cs_lqual_ranges[0].low = -256; bts->cs_lqual_ranges[0].high = 6; |