fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/29628 )
Change subject: pcu: f_pcuif_tx_data_ind(): make waiting behavior configurable ......................................................................
pcu: f_pcuif_tx_data_ind(): make waiting behavior configurable
By default, f_pcuif_tx_data_ind() waits for TDMA_EV_PDTCH_BLOCK_SENT making it impossible to send Uplink blocks with the same TDMA FN but dufferent TDMA TN (multi-slot TBFs). This change allows sending several UL blocks without waiting for TDMA_EV_PDTCH_BLOCK_SENT.
Change-Id: I3200b8a2973f97f08714654e525c631da5d6e382 Related: OS#5696 --- M pcu/GPRS_Components.ttcn 1 file changed, 13 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/28/29628/1
diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn index eb29787..b1dd28d 100644 --- a/pcu/GPRS_Components.ttcn +++ b/pcu/GPRS_Components.ttcn @@ -639,13 +639,15 @@
/* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */ function f_ms_tx_data_ind(inout GprsMS ms, octetstring data, uint32_t fn := 0, + boolean wait := true, /* wait for TDMA_EV_PDTCH_BLOCK_SENT? */ template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum) runs on MS_BTS_IFACE_CT { - f_pcuif_tx_data_ind(data, fn, ms.ta, ms.lqual_cb, nr := nr); + f_pcuif_tx_data_ind(data, fn, ms.ta, ms.lqual_cb, wait, nr := nr); }
function f_ms_tx_ul_block(inout GprsMS ms, template (value) RlcmacUlBlock ul_data, uint32_t fn := 0, template (omit) CodingScheme force_cs_mcs := omit, + boolean wait := true, /* wait for TDMA_EV_PDTCH_BLOCK_SENT? */ template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum) runs on MS_BTS_IFACE_CT { var octetstring data; @@ -665,7 +667,7 @@ data := f_pad_oct(data, f_rlcmac_cs_mcs2block_len(CS_1), '2b'O); } /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */ - f_ms_tx_data_ind(ms, data, fn, nr := nr); + f_ms_tx_data_ind(ms, data, fn, wait, nr := nr); }
function f_ms_tx_ul_data_block(inout GprsMS ms, octetstring payload, @@ -1084,20 +1086,24 @@ return f_pcuif_rx_imm_ass(PCU_IF_SAPI_AGCH, tr_IMM_TBF_ASS(false, ra, fn), nr); }
-/* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */ +/* Enqueue DATA.ind (both TDMA frame and block numbers to be patched). + * By default, wait for TDMA_EV_PDTCH_BLOCK_SENT from the RAW_PCU_BTS_CT. */ function f_pcuif_tx_data_ind(octetstring data, uint32_t fn := 0, TimingAdvance ta := 0, int16_t lqual_cb := 0, + boolean wait := true, /* wait for TDMA_EV_PDTCH_BLOCK_SENT? */ template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum) runs on MS_BTS_IFACE_CT { - var template RAW_PCU_EventParam ev_param := {tdma_fn := ? }; BTS.send(ts_PCUIF_DATA_IND(nr.bts_nr, nr.trx_nr, nr.ts_nr, nr.blk_nr, sapi := PCU_IF_SAPI_PDTCH, data := data, fn := fn, arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)), ta_offs_qbits := ta * 4, lqual_cb := lqual_cb)); - if (fn != 0) { - ev_param := {tdma_fn := fn }; + if (wait) { + if (fn != 0) { + BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT, { tdma_fn := fn })); + } else { + BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT)); + } } - BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT, ev_param)); }
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */