diff options
author | Harald Welte <laforge@gnumonks.org> | 2015-12-12 21:15:19 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2015-12-12 21:39:39 +0100 |
commit | feee8d52bdfe50d9dab722bdc48b85e01d5f08d9 (patch) | |
tree | c8668820811163004043c96ef50b89e25d260bb1 | |
parent | e28a20a2d9d049cd6312e218a7646593bbc43431 (diff) |
LAPDm: Use T200 settings from OML rather than libosmocore defaults
-rw-r--r-- | include/osmo-bts/oml.h | 4 | ||||
-rw-r--r-- | src/common/bts.c | 2 | ||||
-rw-r--r-- | src/common/oml.c | 60 |
3 files changed, 65 insertions, 1 deletions
diff --git a/include/osmo-bts/oml.h b/include/osmo-bts/oml.h index d32a5fbc..a539c6d9 100644 --- a/include/osmo-bts/oml.h +++ b/include/osmo-bts/oml.h @@ -37,4 +37,8 @@ int oml_fom_ack_nack(struct msgb *old_msg, uint8_t cause); int oml_mo_fom_ack_nack(struct gsm_abis_mo *mo, uint8_t orig_msg_type, uint8_t cause); +/* Configure LAPDm T200 timers for this lchan according to OML */ +int oml_set_lchan_t200(struct gsm_lchan *lchan); +extern const uint8_t oml_default_t200_ms[7]; + #endif // _OML_H */ diff --git a/src/common/bts.c b/src/common/bts.c index e0a8a07e..d7255b22 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -109,6 +109,7 @@ int bts_init(struct gsm_bts *bts) btsb->max_ta = 63; btsb->ny1 = 4; btsb->t3105_ms = 300; + memcpy(btsb->t200_ms, oml_default_t200_ms, sizeof(btsb->t200_ms)); /* default RADIO_LINK_TIMEOUT */ btsb->radio_link_timeout = 32; @@ -260,6 +261,7 @@ int lchan_init_lapdm(struct gsm_lchan *lchan) lapdm_channel_set_flags(lc, LAPDM_ENT_F_POLLING_ONLY); lapdm_channel_set_l1(lc, NULL, lchan); lapdm_channel_set_l3(lc, lapdm_rll_tx_cb, lchan); + oml_set_lchan_t200(lchan); return 0; } diff --git a/src/common/oml.c b/src/common/oml.c index 6d778a53..77c5b659 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -386,11 +386,69 @@ static const uint8_t abis_nm_t200_mult[] = { [T200_FACCH_F] = 5, [T200_FACCH_H] = 5, [T200_SACCH_TCH_SAPI0] = 10, - [T200_SACCH_SDCCH] = 10, + [T200_SACCH_SDCCH] = 10, [T200_SDCCH_SAPI3] = 5, [T200_SACCH_TCH_SAPI3] = 10 }; +/* the below defaults correpsond to the libocmocore default of 1s for + * DCCH and 2s for ACCH. The BSC should overried this via OML anyway. */ +const uint8_t oml_default_t200_ms[7] = { + [T200_SDCCH] = 1000/5, + [T200_FACCH_F] = 1000/5, + [T200_FACCH_H] = 1000/5, + [T200_SACCH_TCH_SAPI0] = 2000/10, + [T200_SACCH_SDCCH] = 2000/10, + [T200_SDCCH_SAPI3] = 1000/5, + [T200_SACCH_TCH_SAPI3] = 2000/10, +}; + +static void dl_set_t200(struct lapdm_datalink *dl, unsigned int t200_msec) +{ + dl->dl.t200_sec = t200_msec / 1000; + dl->dl.t200_usec = t200_msec % 1000; +} + +/* Configure LAPDm T200 timers for this lchan according to OML */ +int oml_set_lchan_t200(struct gsm_lchan *lchan) +{ + struct gsm_bts *bts = lchan->ts->trx->bts; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + struct lapdm_channel *lc = &lchan->lapdm_ch; + unsigned int t200_dcch, t200_dcch_sapi3, t200_acch, t200_acch_sapi3; + + /* set T200 for main and associated channel */ + switch (lchan->type) { + case GSM_LCHAN_SDCCH: + t200_dcch = btsb->t200_ms[T200_SDCCH]; + t200_dcch_sapi3 = btsb->t200_ms[T200_SDCCH_SAPI3]; + t200_acch = btsb->t200_ms[T200_SACCH_SDCCH]; + t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_SDCCH]; + break; + case GSM_LCHAN_TCH_F: + t200_dcch = btsb->t200_ms[T200_FACCH_F]; + t200_dcch_sapi3 = btsb->t200_ms[T200_FACCH_F]; + t200_acch = btsb->t200_ms[T200_SACCH_TCH_SAPI0]; + t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_TCH_SAPI3]; + break; + case GSM_LCHAN_TCH_H: + t200_dcch = btsb->t200_ms[T200_FACCH_H]; + t200_dcch_sapi3 = btsb->t200_ms[T200_FACCH_H]; + t200_acch = btsb->t200_ms[T200_SACCH_TCH_SAPI0]; + t200_acch_sapi3 = btsb->t200_ms[T200_SACCH_TCH_SAPI3]; + break; + default: + return -1; + } + + dl_set_t200(&lc->lapdm_dcch.datalink[DL_SAPI0], t200_dcch); + dl_set_t200(&lc->lapdm_dcch.datalink[DL_SAPI3], t200_dcch_sapi3); + dl_set_t200(&lc->lapdm_acch.datalink[DL_SAPI0], t200_acch); + dl_set_t200(&lc->lapdm_acch.datalink[DL_SAPI3], t200_acch_sapi3); + + return 0; +} + /* 8.6.1 Set BTS Attributes has been received */ static int oml_rx_set_bts_attr(struct gsm_bts *bts, struct msgb *msg) { |