aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-10-03 22:26:00 +0700
committerfixeria <vyanitskiy@sysmocom.de>2022-10-04 16:33:10 +0000
commit2950c0363db6721fa8104c67fff3ff0e9f108dcd (patch)
treea037f834af10d01381954ceb48c01ece19c27216
parent493ff0000bc2bdd60357d1b0c21f6fe0e3bf1232 (diff)
osmo-bts-trx: handle MTS 0b0110 indicating an Access Burst
The PCU may poll the MS requesting an ACKnowledgment message to be sent in form of four Access Bursts instead of Normal Bursts. The BTS has no prior knowledge of the Uplink burst type, so a new MTS value was specified in order to prevent the BTS from trying to decode Access Bursts as a PDTCH block. This patch implements parsing of the new MTS value 0b0110. Signalling RACH.ind to the PCU is to be implemented. Change-Id: I0fbb63006797e6be386d1f76ed97fff098c036fc Related: OS#4006, SYS#4794
-rw-r--r--include/osmo-bts/scheduler.h1
-rw-r--r--src/osmo-bts-trx/sched_lchan_pdtch.c4
-rw-r--r--src/osmo-bts-trx/trx_if.c7
3 files changed, 11 insertions, 1 deletions
diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h
index c96b70b4..40b42939 100644
--- a/include/osmo-bts/scheduler.h
+++ b/include/osmo-bts/scheduler.h
@@ -240,6 +240,7 @@ extern const struct trx_sched_multiframe trx_sched_multiframes[];
#define TRX_BI_F_TRX_NUM (1 << 4)
#define TRX_BI_F_BATCH_IND (1 << 5)
#define TRX_BI_F_SHADOW_IND (1 << 6)
+#define TRX_BI_F_ACCESS_BURST (1 << 7)
/*! UL burst indication with the corresponding meta info */
struct trx_ul_burst_ind {
diff --git a/src/osmo-bts-trx/sched_lchan_pdtch.c b/src/osmo-bts-trx/sched_lchan_pdtch.c
index 92bb5a81..8300bdbb 100644
--- a/src/osmo-bts-trx/sched_lchan_pdtch.c
+++ b/src/osmo-bts-trx/sched_lchan_pdtch.c
@@ -56,6 +56,10 @@ int rx_pdtch_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi)
LOGL1SB(DL1P, LOGL_DEBUG, l1ts, bi, "Received PDTCH bid=%u\n", bi->bid);
+ /* An MS may be polled to send an ACK in form of four Access Bursts */
+ if (bi->flags & TRX_BI_F_ACCESS_BURST)
+ return rx_rach_fn(l1ts, bi);
+
/* allocate burst memory, if not already */
if (!*bursts_p) {
*bursts_p = talloc_zero_size(l1ts, GSM0503_EGPRS_BURSTS_NBITS);
diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c
index ba297886..bb9404c8 100644
--- a/src/osmo-bts-trx/trx_if.c
+++ b/src/osmo-bts-trx/trx_if.c
@@ -826,13 +826,18 @@ static inline int trx_data_parse_mts(struct phy_instance *phy_inst,
/* | 7 6 5 4 3 2 1 0 | Bitmask / description
* | . 0 0 X X . . . | GMSK, 4 TSC sets (0..3)
- * | . 0 1 0 X . . . | 8-PSK, 2 TSC sets (0..1) */
+ * | . 0 1 0 X . . . | 8-PSK, 2 TSC sets (0..1)
+ * | . 0 1 1 0 . . . | GMSK, Access Burst */
if ((mts >> 5) == 0x00) {
bi->mod = TRX_MOD_T_GMSK;
bi->tsc_set = (mts >> 3) & 0x03;
} else if ((mts >> 4) == 0x02) {
bi->mod = TRX_MOD_T_8PSK;
bi->tsc_set = (mts >> 3) & 0x01;
+ } else if ((mts >> 3) == 0x06) {
+ bi->flags |= TRX_BI_F_ACCESS_BURST;
+ bi->mod = TRX_MOD_T_GMSK;
+ bi->tsc_set = 0;
} else {
LOGPPHI(phy_inst, DTRX, LOGL_ERROR,
"Rx TRXD PDU with unknown or not supported "