X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_rach.c;h=d3ea542ed1bbfc0c9739b1e990e01d2bac119b14;hb=60d14257f866aab93574d57cceecad4859670f82;hp=2681a0df8a2e0a36a4e477c55830808942bf3dca;hpb=2324a199636bc2e127af6bb3beefef668b4f45d7;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index 2681a0df8..d3ea542ed 100644 --- a/src/5gnrsch/sch_rach.c +++ b/src/5gnrsch/sch_rach.c @@ -106,14 +106,10 @@ void createSchRaCb(uint16_t tcrnti, Inst schInst) * @return void **/ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ - uint16_t *msg3StartRb, uint8_t *msg3NumRb) + uint16_t *msg3StartRb, uint8_t *msg3NumRb, uint16_t msg3SlotAlloc) { SchCellCb *cell = NULLP; SchUlSlotInfo *schUlSlotInfo = NULLP; - uint8_t puschMu = 0; - uint8_t msg3SlotAlloc = 0; - uint8_t delta = 0; - uint8_t k2 = 0; uint8_t startSymb = 0; uint8_t symbLen = 0; uint8_t startRb = 0; @@ -124,16 +120,9 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ uint16_t tbSize = 0; cell = schCb[schInst].cells[schInst]; - // puschMu = cell->cellCfg.puschMu; - delta = puschDeltaTable[puschMu]; - k2 = cell->cellCfg.schInitialUlBwp.puschCommon.k2; startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.startSymbol; symbLen = cell->cellCfg.schInitialUlBwp.puschCommon.lengthSymbol; - /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */ - msg3SlotAlloc = slot + k2 + delta; - msg3SlotAlloc = msg3SlotAlloc % cell->numSlots; - startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb; tbSize = schCalcTbSize(8); /* 6 bytes msg3 and 2 bytes header */ numRb = schCalcNumPrb(tbSize, mcs, numPdschSymbols); @@ -157,7 +146,7 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ } tbSize = 0; /* since nPrb has been incremented, recalculating tbSize */ tbSize = schCalcTbSizeFromNPrb(numRb, mcs, numPdschSymbols); - + tbSize = tbSize/8;/*bits to byte conversion*/ schUlSlotInfo->schPuschInfo->crnti = crnti; schUlSlotInfo->schPuschInfo->harqProcId = SCH_HARQ_PROC_ID; schUlSlotInfo->schPuschInfo->resAllocType = SCH_ALLOC_TYPE_1; @@ -204,9 +193,43 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) uint16_t msg3StartRb; uint8_t msg3NumRb; uint8_t ret = ROK; - + uint8_t delta = 0; + uint8_t k2 = 0; + uint8_t puschMu = 0; + uint16_t msg3Slot = 0; +#ifdef NR_TDD + uint16_t slotIdx = 0; +#endif + + //puschMu = cell->cellCfg.puschMu; + delta = puschDeltaTable[puschMu]; + k2 = cell->cellCfg.schInitialUlBwp.puschCommon.k2; /* RAR will sent with a delay of RAR_DELAY */ rarSlot = (rachInd->timingInfo.slot+RAR_DELAY+PHY_DELTA_DL)%cell->numSlots; +#ifdef NR_TDD + for(slotIdx=0; slotIdxnumSlots;slotIdx++) + { + /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */ + msg3Slot = (rarSlot+delta+k2)%cell->numSlots; + + if((schGetSlotSymbFrmt(rarSlot, cell->slotFrmtBitMap) != DL_SLOT) &&\ + (schGetSlotSymbFrmt(msg3Slot, cell->slotFrmtBitMap) != UL_SLOT)) + { + rarSlot = (rarSlot + 1) % cell->numSlots; + continue; + } + break; + } + if(slotIdx>=cell->numSlots) + { + DU_LOG("\nERROR --> SCH : NO Slot for Msg2 with Msg3 Grant\n"); + return RFAILED; + } +#else + /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */ + msg3Slot = rarSlot + k2 + delta; + msg3Slot = msg3Slot % cell->numSlots; +#endif SchDlSlotInfo *schDlSlotInfo = cell->schDlSlotInfo[rarSlot]; /* RAR will sent in the next slot */ @@ -227,7 +250,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) createSchRaCb(rachInd->crnti,schInst); /* allocate resources for msg3 */ - ret = schAllocMsg3Pusch(schInst, rarSlot, rachInd->crnti, &msg3StartRb, &msg3NumRb); + ret = schAllocMsg3Pusch(schInst, rarSlot, rachInd->crnti, &msg3StartRb, &msg3NumRb, msg3Slot); if(ret == ROK) { /* fill RAR info */