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 "