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=7cec7b8608958822885921b4be4e2878c972629b;hpb=65443172dd60a6ea312bd3a15959dbf54ad7f045;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index 7cec7b860..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 % SCH_NUM_SLOTS; - startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb; tbSize = schCalcTbSize(8); /* 6 bytes msg3 and 2 bytes header */ numRb = schCalcNumPrb(tbSize, mcs, numPdschSymbols); @@ -152,12 +141,12 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ SCH_ALLOC(schUlSlotInfo->schPuschInfo, sizeof(SchPuschInfo)); if(!schUlSlotInfo->schPuschInfo) { - DU_LOG("SCH: Memory allocation failed in schAllocMsg3Pusch"); + DU_LOG("\nERROR --> SCH : Memory allocation failed in schAllocMsg3Pusch"); return RFAILED; } 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; @@ -165,7 +154,9 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ schUlSlotInfo->schPuschInfo->fdAlloc.numPrb = numRb; schUlSlotInfo->schPuschInfo->tdAlloc.startSymb = startSymb; schUlSlotInfo->schPuschInfo->tdAlloc.numSymb = symbLen; - schUlSlotInfo->schPuschInfo->tbInfo.mcs = mcs; + schUlSlotInfo->schPuschInfo->tbInfo.qamOrder = 2; /* QPSK modulation */ + schUlSlotInfo->schPuschInfo->tbInfo.mcs = mcs; + schUlSlotInfo->schPuschInfo->tbInfo.mcsTable = SCH_MCS_TABLE_QAM_64; schUlSlotInfo->schPuschInfo->tbInfo.ndi = 1; /* new transmission */ schUlSlotInfo->schPuschInfo->tbInfo.rv = 0; schUlSlotInfo->schPuschInfo->tbInfo.tbSize = tbSize; /*Considering 2 PRBs */ @@ -175,7 +166,6 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ *msg3StartRb = startRb; *msg3NumRb = numRb; - return ROK; } @@ -203,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)%SCH_NUM_SLOTS; + 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 */ @@ -213,7 +237,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) SCH_ALLOC(rarInfo, sizeof(RarInfo)); if(rarInfo == NULLP) { - DU_LOG("\nMAC: Memory Allocation failed for rarInfo"); + DU_LOG("\nERROR --> SCH : Memory Allocation failed for rarInfo"); return RFAILED; } @@ -226,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 */