Simplify TS alloc: don't use PDCH for free TFI

Don't use PDCH from free TFI lookup routine. This allows for simpler
function which can be moved to mslot_class.c alongside with other
similar helpers.

Change-Id: Ie154866900453d232a890f7b9a30911b451525a1
Related: OS#2282
This commit is contained in:
Max 2018-02-05 16:11:36 +01:00
parent 6dc90b8c86
commit c5407c775a
4 changed files with 21 additions and 19 deletions

View File

@ -28,6 +28,7 @@ extern "C" {
#include <osmocom/core/stat_item.h>
#include <osmocom/gsm/l1sap.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <mslot_class.h>
}
#include <gsm_rlcmac.h>
@ -45,7 +46,6 @@ extern "C" {
#define LLC_CODEL_DISABLE 0
#define LLC_CODEL_USE_DEFAULT (-1)
#define MAX_GPRS_CS 9
#define NO_FREE_TFI 0xffffffff
/* see bts->gsmtap_categ_mask */
enum pcu_gsmtap_category {

View File

@ -62,23 +62,6 @@ static bool test_and_set_bit(uint32_t *bits, size_t elem)
return was_set;
}
static inline int8_t find_free_tfi(const struct gprs_rlcmac_pdch *pdch, enum gprs_rlcmac_tbf_direction dir)
{
uint32_t tfi_map = pdch->assigned_tfi(dir);
int8_t tfi;
if (tfi_map == NO_FREE_TFI)
return -1;
/* look for USF, don't use USF=7 */
for (tfi = 0; tfi < 32; tfi++) {
if (!(tfi_map & (1 << tfi)))
return tfi;
}
return -1;
}
static int find_possible_pdchs(const struct gprs_rlcmac_trx *trx, size_t max_slots, uint8_t mask,
const char *mask_reason = NULL)
{
@ -187,7 +170,7 @@ static int find_least_busy_pdch(const struct gprs_rlcmac_trx *trx, enum gprs_rlc
/* We have found a candidate */
/* Make sure that a TFI is available */
if (free_tfi) {
tfi = find_free_tfi(pdch, dir);
tfi = find_free_tfi(pdch->assigned_tfi(dir));
if (tfi < 0) {
LOGP(DRLCMAC, LOGL_DEBUG,
"- Skipping TS %d, because "

View File

@ -229,6 +229,22 @@ int8_t find_free_usf(uint8_t usf_map)
return -1;
}
/* look for USF, don't use USF=7 */
int8_t find_free_tfi(uint32_t tfi_map)
{
int8_t tfi;
if (tfi_map == NO_FREE_TFI)
return -1;
for (tfi = 0; tfi < 32; tfi++) {
if (!(tfi_map & (1 << tfi)))
return tfi;
}
return -1;
}
void masked_override_with(char *buf, uint8_t mask, char set_char)
{
int i;

View File

@ -36,6 +36,8 @@
#define DEFAULT_MSLOT_CLASS 12
#define NO_FREE_TFI 0xffffffff
enum { MASK_TT = 0, MASK_TR = 1 };
/* multislot class selection routines */
@ -52,4 +54,5 @@ uint8_t mslot_class_max();
/* multislot allocation helper routines */
void mslot_fill_rx_mask(uint8_t mslot_class, uint8_t num_tx, uint8_t *rx_mask);
int8_t find_free_usf(uint8_t usf_map);
int8_t find_free_tfi(uint32_t tfi_map);
void masked_override_with(char *buf, uint8_t mask, char set_char);