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
This commit is contained in:
Vadim Yanitskiy 2022-10-03 22:26:00 +07:00 committed by fixeria
parent 493ff0000b
commit 2950c0363d
3 changed files with 11 additions and 1 deletions

View File

@ -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 {

View File

@ -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);

View File

@ -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 "