X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_rach.c;h=079d01af554ba4da9090640fcf1a6cc4df6d197c;hb=5cc86eb25cc33a2cc1472325cffc5634a6c203c6;hp=1e4edb291f25946c090944299136aa54da0f451c;hpb=7ba0c6ecc645d7b36fdd02913d1b92727c36f413;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index 1e4edb291..079d01af5 100644 --- a/src/5gnrsch/sch_rach.c +++ b/src/5gnrsch/sch_rach.c @@ -42,8 +42,8 @@ #include "sch.h" #include "sch_utils.h" -extern SchCb schCb[SCH_MAX_INST]; -extern uint8_t puschDeltaTable[MAX_MU_PUSCH]; +SchCb schCb[SCH_MAX_INST]; +uint8_t puschDeltaTable[MAX_MU_PUSCH]; /** * @brief calculate ra-rnti function. @@ -62,9 +62,11 @@ extern uint8_t puschDeltaTable[MAX_MU_PUSCH]; uint16_t calculateRaRnti(uint8_t symbolIdx, uint8_t slotIdx, uint8_t freqIdx) { uint16_t raRnti = 0; - uint8_t ulCarrierIdx = 0; /* configured to 0 */ + uint8_t ulCarrierIdx = 0; /* configured to 0 */ + raRnti = (1+symbolIdx+(14*slotIdx)+(14*80*freqIdx)+(14*80*8*ulCarrierIdx)); - return raRnti; + + return raRnti; } /** @@ -82,7 +84,10 @@ uint16_t calculateRaRnti(uint8_t symbolIdx, uint8_t slotIdx, uint8_t freqIdx) **/ void createSchRaCb(uint16_t tcrnti, Inst schInst) { - schCb[schInst].cells[schInst]->raCb[0].tcrnti = tcrnti; + uint8_t ueIdx = 0; + + GET_UE_IDX(tcrnti, ueIdx); + schCb[schInst].cells[schInst]->raCb[ueIdx -1].tcrnti = tcrnti; } /** @@ -100,8 +105,8 @@ void createSchRaCb(uint16_t tcrnti, Inst schInst) * @param[out] msg3NumRb * @return void **/ -uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t *msg3StartRb, -uint8_t *msg3NumRb) +uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ + uint16_t *msg3StartRb, uint8_t *msg3NumRb) { SchCellCb *cell = NULLP; SchUlSlotInfo *schUlSlotInfo = NULLP; @@ -127,7 +132,7 @@ uint8_t *msg3NumRb) /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */ msg3SlotAlloc = slot + k2 + delta; - msg3SlotAlloc = msg3SlotAlloc % SCH_NUM_SLOTS; + msg3SlotAlloc = msg3SlotAlloc % cell->numSlots; startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb; tbSize = schCalcTbSize(8); /* 6 bytes msg3 and 2 bytes header */ @@ -147,19 +152,22 @@ uint8_t *msg3NumRb) 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); + schUlSlotInfo->schPuschInfo->crnti = crnti; schUlSlotInfo->schPuschInfo->harqProcId = SCH_HARQ_PROC_ID; schUlSlotInfo->schPuschInfo->resAllocType = SCH_ALLOC_TYPE_1; schUlSlotInfo->schPuschInfo->fdAlloc.startPrb = startRb; 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 */ @@ -169,7 +177,6 @@ uint8_t *msg3NumRb) *msg3StartRb = startRb; *msg3NumRb = numRb; - return ROK; } @@ -199,7 +206,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) uint8_t ret = ROK; /* 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)%cell->numSlots; SchDlSlotInfo *schDlSlotInfo = cell->schDlSlotInfo[rarSlot]; /* RAR will sent in the next slot */ @@ -207,7 +214,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; } @@ -220,7 +227,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) createSchRaCb(rachInd->crnti,schInst); /* allocate resources for msg3 */ - ret = schAllocMsg3Pusch(schInst, rarSlot, &msg3StartRb, &msg3NumRb); + ret = schAllocMsg3Pusch(schInst, rarSlot, rachInd->crnti, &msg3StartRb, &msg3NumRb); if(ret == ROK) { /* fill RAR info */ @@ -287,7 +294,7 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of } /* calculate the PRBs */ - schAllocFreqDomRscType0(((offsetPointA-offset)/6), (numRbs/6), FreqDomainResource); + freqDomRscAllocType0(((offsetPointA-offset)/6), (numRbs/6), FreqDomainResource); /* fill BWP */ bwp->freqAlloc.numPrb = initialBwp->bwp.freqAlloc.numPrb; @@ -296,15 +303,15 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of bwp->cyclicPrefix = initialBwp->bwp.cyclicPrefix; /* fill the PDCCH PDU */ - pdcch->coreset0Cfg.startSymbolIndex = firstSymbol; - pdcch->coreset0Cfg.durationSymbols = numSymbols; - memcpy(pdcch->coreset0Cfg.freqDomainResource,FreqDomainResource,6); - pdcch->coreset0Cfg.cceRegMappingType = 1; /* coreset0 is always interleaved */ - pdcch->coreset0Cfg.regBundleSize = 6; /* spec-38.211 sec 7.3.2.2 */ - pdcch->coreset0Cfg.interleaverSize = 2; /* spec-38.211 sec 7.3.2.2 */ - pdcch->coreset0Cfg.coreSetType = 0; - pdcch->coreset0Cfg.shiftIndex = pci; - pdcch->coreset0Cfg.precoderGranularity = 0; /* sameAsRegBundle */ + pdcch->coresetCfg.startSymbolIndex = firstSymbol; + pdcch->coresetCfg.durationSymbols = numSymbols; + memcpy(pdcch->coresetCfg.freqDomainResource, FreqDomainResource, FREQ_DOM_RSRC_SIZE); + pdcch->coresetCfg.cceRegMappingType = 1; /* coreset0 is always interleaved */ + pdcch->coresetCfg.regBundleSize = 6; /* spec-38.211 sec 7.3.2.2 */ + pdcch->coresetCfg.interleaverSize = 2; /* spec-38.211 sec 7.3.2.2 */ + pdcch->coresetCfg.coreSetType = 0; + pdcch->coresetCfg.shiftIndex = pci; + pdcch->coresetCfg.precoderGranularity = 0; /* sameAsRegBundle */ pdcch->numDlDci = 1; pdcch->dci.rnti = raRnti; /* RA-RNTI */ pdcch->dci.scramblingId = pci;