From 2950c0363db6721fa8104c67fff3ff0e9f108dcd Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Mon, 3 Oct 2022 22:26:00 +0700 Subject: [PATCH] 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 --- include/osmo-bts/scheduler.h | 1 + src/osmo-bts-trx/sched_lchan_pdtch.c | 4 ++++ src/osmo-bts-trx/trx_if.c | 7 ++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h index c96b70b46..40b429392 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 92bb5a81d..8300bdbbe 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 ba2978866..bb9404c8f 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 "