This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgHello Harald Welte, Jenkins Builder, Holger Freyther,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/544
to look at the new patch set (#8).
Use qbit-TA to update Timing Advance
Separate qbit-TA to TA conversion into separate function and use it for
computing and updating Timing Advance.
Note: the code was tested with TA=0 only to make sure it does not
introduce regressions.
Change-Id: I96fdbb20b09fb85fdd9fb6dcf3c25f6bee7f80e4
Fixes: OS#1531
---
M src/bts.cpp
M src/bts.h
M src/osmo-bts-litecell15/lc15_l1_if.c
M src/osmo-bts-sysmo/sysmo_l1_if.c
M src/pcu_l1_if.h
5 files changed, 38 insertions(+), 49 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/44/544/8
diff --git a/src/bts.cpp b/src/bts.cpp
index c53c92c..2e52137 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -477,7 +477,7 @@
int plen;
uint8_t usf = 7;
uint8_t tsc;
- uint16_t ta;
+ uint8_t ta = qta2ta(qta);
rach_frame();
@@ -492,12 +492,6 @@
"but we force two phase access\n");
sb = 1;
}
- if (qta < 0)
- qta = 0;
- if (qta > 252)
- qta = 252;
-
- ta = qta >> 2;
if (sb) {
rc = sba()->alloc(&trx_no, &ts_no, &sb_fn, ta);
@@ -1407,6 +1401,23 @@
return rc;
}
+void bts_update_tbf_ta(const char *p, uint32_t fn, uint8_t trx_no, uint8_t ts,
+ uint8_t ta)
+{
+ struct gprs_rlcmac_ul_tbf *tbf =
+ bts_main_data()->bts->ul_tbf_by_poll_fn(fn, trx_no, ts);
+ if (!tbf)
+ LOGP(DL1IF, LOGL_DEBUG, "[%s] update TA = %u ignored due to "
+ "unknown UL TBF on TRX = %d, TS = %d, FN = %d\n",
+ p, ta, trx_no, ts, fn);
+ else if (tbf->ta() != ta) {
+ LOGP(DL1IF, LOGL_INFO, "[%s] Updating TA %u -> %u on "
+ "TRX = %d, TS = %d, FN = %d\n",
+ p, tbf->ta(), ta, trx_no, ts, fn);
+ tbf->set_ta(ta);
+ }
+}
+
gprs_rlcmac_tbf *gprs_rlcmac_pdch::tbf_from_list_by_tfi(
LListHead<gprs_rlcmac_tbf> *tbf_list, uint8_t tfi,
enum gprs_rlcmac_tbf_direction dir)
diff --git a/src/bts.h b/src/bts.h
index 807ce08..2960203 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -142,6 +142,9 @@
#endif
};
+void bts_update_tbf_ta(const char *p, uint32_t fn, uint8_t trx_no, uint8_t ts,
+ uint8_t ta);
+
/**
* This is the data from C. As soon as our minimal compiler is gcc 4.7
* we can start to compile pcu_vty.c with c++ and remove the split.
diff --git a/src/osmo-bts-litecell15/lc15_l1_if.c b/src/osmo-bts-litecell15/lc15_l1_if.c
index a2189f0..eb680b2 100644
--- a/src/osmo-bts-litecell15/lc15_l1_if.c
+++ b/src/osmo-bts-litecell15/lc15_l1_if.c
@@ -204,6 +204,8 @@
data_ind->msgUnitParam.u8Size-1);
get_meas(&meas, &data_ind->measParam);
+ bts_update_tbf_ta("PH-DATA", data_ind->u32Fn, fl1h->trx_no,
+ data_ind->u8Tn, qta2ta(meas.bto));
switch (data_ind->sapi) {
case GsmL1_Sapi_Pdtch:
@@ -235,31 +237,12 @@
static int handle_ph_ra_ind(struct lc15l1_hdl *fl1h, GsmL1_PhRaInd_t *ra_ind)
{
- uint8_t acc_delay;
-
if (ra_ind->measParam.fLinkQuality < MIN_QUAL_RACH)
return 0;
DEBUGP(DL1IF, "Rx PH-RA.ind");
-
- /* check for under/overflow / sign */
- if (ra_ind->measParam.i16BurstTiming < 0)
- acc_delay = 0;
- else
- acc_delay = ra_ind->measParam.i16BurstTiming >> 2;
-
- LOGP(DL1IF, LOGL_NOTICE, "got (P)RACH request, TA = %u (ignored)\n",
- acc_delay);
-
-#warning "The (P)RACH request is just dropped here"
-
-#if 0
- if (acc_delay > bts->max_ta) {
- LOGP(DL1C, LOGL_INFO, "ignoring RACH request %u > max_ta(%u)\n",
- acc_delay, btsb->max_ta);
- return 0;
- }
-#endif
+ bts_update_tbf_ta("PH-RA", ra_ind->u32Fn, fl1h->trx_no, ra_ind->u8Tn,
+ qta2ta(ra_ind->measParam.i16BurstTiming));
return 0;
}
diff --git a/src/osmo-bts-sysmo/sysmo_l1_if.c b/src/osmo-bts-sysmo/sysmo_l1_if.c
index 75a2d5f..4ebabc5 100644
--- a/src/osmo-bts-sysmo/sysmo_l1_if.c
+++ b/src/osmo-bts-sysmo/sysmo_l1_if.c
@@ -189,6 +189,8 @@
data_ind->msgUnitParam.u8Size-1);
get_meas(&meas, &data_ind->measParam);
+ bts_update_tbf_ta("PH-DATA", data_ind->u32Fn, fl1h->trx_no,
+ data_ind->u8Tn, qta2ta(meas.bto));
switch (data_ind->sapi) {
case GsmL1_Sapi_Pdtch:
@@ -220,33 +222,14 @@
static int handle_ph_ra_ind(struct femtol1_hdl *fl1h, GsmL1_PhRaInd_t *ra_ind)
{
- uint8_t acc_delay;
-
pcu_rx_ra_time(ra_ind->u16Arfcn, ra_ind->u32Fn, ra_ind->u8Tn);
if (ra_ind->measParam.fLinkQuality < MIN_QUAL_RACH)
return 0;
DEBUGP(DL1IF, "Rx PH-RA.ind");
-
- /* check for under/overflow / sign */
- if (ra_ind->measParam.i16BurstTiming < 0)
- acc_delay = 0;
- else
- acc_delay = ra_ind->measParam.i16BurstTiming >> 2;
-
- LOGP(DL1IF, LOGL_NOTICE, "got (P)RACH request, TA = %u (ignored)\n",
- acc_delay);
-
-#warning "The (P)RACH request is just dropped here"
-
-#if 0
- if (acc_delay > bts->max_ta) {
- LOGP(DL1C, LOGL_INFO, "ignoring RACH request %u > max_ta(%u)\n",
- acc_delay, btsb->max_ta);
- return 0;
- }
-#endif
+ bts_update_tbf_ta("PH-RA", ra_ind->u32Fn, fl1h->trx_no, ra_ind->u8Tn,
+ qta2ta(ra_ind->measParam.i16BurstTiming));
return 0;
}
diff --git a/src/pcu_l1_if.h b/src/pcu_l1_if.h
index b2a9832..d9d970d 100644
--- a/src/pcu_l1_if.h
+++ b/src/pcu_l1_if.h
@@ -33,6 +33,15 @@
}
#endif
+static inline uint8_t qta2ta(int16_t qta)
+{
+ if (qta < 0)
+ return 0;
+ if (qta > 252)
+ qta = 252;
+ return qta >> 2;
+}
+
/*
* L1 Measurement values
*/
--
To view, visit https://gerrit.osmocom.org/544
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I96fdbb20b09fb85fdd9fb6dcf3c25f6bee7f80e4
Gerrit-PatchSet: 8
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>