diff options
-rw-r--r-- | include/osmo-bts/scheduler.h | 1 | ||||
-rw-r--r-- | src/common/scheduler.c | 6 | ||||
-rw-r--r-- | src/osmo-bts-trx/sched_lchan_xcch.c | 14 |
3 files changed, 7 insertions, 14 deletions
diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h index b9c73508..aea55959 100644 --- a/include/osmo-bts/scheduler.h +++ b/include/osmo-bts/scheduler.h @@ -92,7 +92,6 @@ struct l1sched_chan_state { enum trx_mod_type dl_mod_type; /* Downlink modulation type */ uint8_t dl_mask; /* mask of transmitted bursts */ sbit_t *ul_bursts; /* burst buffer for RX */ - sbit_t *ul_bursts_prev;/* previous burst buffer for RX (repeated SACCH) */ uint32_t ul_first_fn; /* fn of first burst */ uint32_t ul_mask; /* mask of received bursts */ diff --git a/src/common/scheduler.c b/src/common/scheduler.c index 0e62b652..ef039327 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -1084,11 +1084,8 @@ static void _trx_sched_set_lchan(struct gsm_lchan *lchan, const size_t buf_size = 24 * GSM_NBITS_NB_GMSK_PAYLOAD; if (trx_chan_desc[chan].dl_fn != NULL) chan_state->dl_bursts = talloc_zero_size(l1ts, buf_size); - if (trx_chan_desc[chan].ul_fn != NULL) { + if (trx_chan_desc[chan].ul_fn != NULL) chan_state->ul_bursts = talloc_zero_size(l1ts, buf_size); - if (L1SAP_IS_LINK_SACCH(trx_chan_desc[chan].link_id)) - chan_state->ul_bursts_prev = talloc_zero_size(l1ts, buf_size); - } } else { chan_state->ho_rach_detect = 0; @@ -1100,7 +1097,6 @@ static void _trx_sched_set_lchan(struct gsm_lchan *lchan, /* Release memory used by Rx/Tx burst buffers */ TALLOC_FREE(chan_state->dl_bursts); TALLOC_FREE(chan_state->ul_bursts); - TALLOC_FREE(chan_state->ul_bursts_prev); } chan_state->active = active; diff --git a/src/osmo-bts-trx/sched_lchan_xcch.c b/src/osmo-bts-trx/sched_lchan_xcch.c index a1a5e304..b6b51177 100644 --- a/src/osmo-bts-trx/sched_lchan_xcch.c +++ b/src/osmo-bts-trx/sched_lchan_xcch.c @@ -67,7 +67,9 @@ int rx_data_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi) /* clear burst & store frame number of first burst */ if (bi->bid == 0) { - memset(bursts_p, 0, BPLEN * 4); + if (rep_sacch) /* Keep a copy to ease decoding in the next repetition pass */ + memcpy(BUFPOS(bursts_p, 4), BUFPOS(bursts_p, 0), BPLEN * 4); + memset(BUFPOS(bursts_p, 0), 0, BPLEN * 4); *mask = 0x0; *first_fn = bi->fn; } @@ -107,7 +109,7 @@ int rx_data_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi) *mask = 0x0; /* decode */ - rc = gsm0503_xcch_decode(l2, bursts_p, &n_errors, &n_bits_total); + rc = gsm0503_xcch_decode(l2, BUFPOS(bursts_p, 0), &n_errors, &n_bits_total); if (rc) { LOGL1SB(DL1P, LOGL_NOTICE, l1ts, bi, BAD_DATA_MSG_FMT "\n", BAD_DATA_MSG_ARGS); @@ -118,8 +120,8 @@ int rx_data_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi) * information from the previous SACCH block. See also: * 3GPP TS 44.006, section 11.2 */ if (rep_sacch) { - add_sbits(bursts_p, chan_state->ul_bursts_prev); - rc = gsm0503_xcch_decode(l2, bursts_p, &n_errors, &n_bits_total); + add_sbits(BUFPOS(bursts_p, 0), BUFPOS(bursts_p, 4)); + rc = gsm0503_xcch_decode(l2, BUFPOS(bursts_p, 0), &n_errors, &n_bits_total); if (rc) { LOGL1SB(DL1P, LOGL_NOTICE, l1ts, bi, "Combining current SACCH block with previous SACCH block also yields bad data (%u/%u)\n", @@ -136,10 +138,6 @@ int rx_data_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi) ber10k = compute_ber10k(n_bits_total, n_errors); - /* Keep a copy to ease decoding in the next repetition pass */ - if (rep_sacch) - memcpy(chan_state->ul_bursts_prev, bursts_p, BPLEN * 4); - return _sched_compose_ph_data_ind(l1ts, *first_fn, bi->chan, &l2[0], l2_len, ber10k, |