X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_rach.c;h=7f6ab3225af56f9ddbda6270799892a8b93c7d61;hb=b4e352a998576ab71aa74eb8b970f0ba39b471af;hp=315ac6e27fdc3e7ee49291e932fcf707dd99d87e;hpb=b7a8e8fc6abc7fba2f580684da44413d481be825;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index 315ac6e27..7f6ab3225 100644 --- a/src/5gnrsch/sch_rach.c +++ b/src/5gnrsch/sch_rach.c @@ -42,13 +42,6 @@ #include "sch.h" #include "sch_utils.h" -SchRachRsrcRspFunc SchRachRsrcRspOpts[] = -{ - packSchRachRsrcRsp, /* LC */ - MacProcSchRachRsrcRsp, /* TC */ - packSchRachRsrcRsp /* LWLC */ -}; - /** * @brief Checks if PRACH can be scheduled in current slot * @@ -196,7 +189,7 @@ void schPrachResAlloc(SchCellCb *cell, UlSchedInfo *ulSchedInfo, SlotTimingInfo * * @details * - * Function : MacSchRachRsrcReq + * Function : SchProcRachRsrcReq * * This function processes RACH resorce request * from MAC for CFRA. It assigns a dedicated preamble @@ -208,7 +201,7 @@ void schPrachResAlloc(SchCellCb *cell, UlSchedInfo *ulSchedInfo, SlotTimingInfo * @return ROK * RFAILED **/ -uint8_t MacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq) +uint8_t SchProcRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq) { uint8_t ssbIdx = 0, cfraSsbIdx = 0; uint8_t firstCFPreambleIndex = 0, lastCFPreambleIndex = 0; @@ -335,7 +328,7 @@ uint8_t MacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq) SCH_FREE(schRachRsrcReq, sizeof(SchRachRsrcReq)); /* Send RACH resource response to MAC */ - return (SchRachRsrcRspOpts[rspPst.selector](&rspPst, rachRsrcRsp)); + return(MacMessageRouter(&rspPst, (void *)rachRsrcRsp)); } /** @@ -456,11 +449,10 @@ SchPuschInfo* schAllocMsg3Pusch(Inst schInst, uint16_t crnti, uint8_t k2Index, S tbSize = schCalcTbSizeFromNPrb(numRb, mcs, NUM_PDSCH_SYMBOL); tbSize = tbSize / 8 ; /*bits to byte conversion*/ - schUlSlotInfo->schPuschInfo->crnti = crnti; schUlSlotInfo->schPuschInfo->harqProcId = msg3HqProc->procId; - schUlSlotInfo->schPuschInfo->resAllocType = SCH_ALLOC_TYPE_1; - schUlSlotInfo->schPuschInfo->fdAlloc.startPrb = startRb; - schUlSlotInfo->schPuschInfo->fdAlloc.numPrb = numRb; + schUlSlotInfo->schPuschInfo->fdAlloc.resAllocType = SCH_ALLOC_TYPE_1; + schUlSlotInfo->schPuschInfo->fdAlloc.resAlloc.type1.startPrb = startRb; + schUlSlotInfo->schPuschInfo->fdAlloc.resAlloc.type1.numPrb = numRb; schUlSlotInfo->schPuschInfo->tdAlloc.startSymb = startSymb; schUlSlotInfo->schPuschInfo->tdAlloc.numSymb = symbLen; schUlSlotInfo->schPuschInfo->tbInfo.qamOrder = QPSK_MODULATION; /* QPSK modulation */ @@ -469,25 +461,30 @@ SchPuschInfo* schAllocMsg3Pusch(Inst schInst, uint16_t crnti, uint8_t k2Index, S schUlSlotInfo->schPuschInfo->tbInfo.ndi = NEW_TRANSMISSION; /* new transmission */ schUlSlotInfo->schPuschInfo->tbInfo.rv = 0; schUlSlotInfo->schPuschInfo->tbInfo.tbSize = tbSize; +#ifdef INTEL_FAPI schUlSlotInfo->schPuschInfo->dmrsMappingType = DMRS_MAP_TYPE_A; /* Setting Type-A */ schUlSlotInfo->schPuschInfo->nrOfDmrsSymbols = NUM_DMRS_SYMBOLS; schUlSlotInfo->schPuschInfo->dmrsAddPos = DMRS_ADDITIONAL_POS; +#endif + if(!isRetx) { msg3HqProc->strtSymbl = startSymb; msg3HqProc->numSymbl = symbLen; - msg3HqProc->puschResType = schUlSlotInfo->schPuschInfo->resAllocType; - msg3HqProc->puschStartPrb = schUlSlotInfo->schPuschInfo->fdAlloc.startPrb; - msg3HqProc->puschNumPrb = schUlSlotInfo->schPuschInfo->fdAlloc.numPrb; + msg3HqProc->puschResType = schUlSlotInfo->schPuschInfo->fdAlloc.resAllocType; + msg3HqProc->puschStartPrb = schUlSlotInfo->schPuschInfo->fdAlloc.resAlloc.type1.startPrb; + msg3HqProc->puschNumPrb = schUlSlotInfo->schPuschInfo->fdAlloc.resAlloc.type1.numPrb; msg3HqProc->tbInfo.qamOrder = schUlSlotInfo->schPuschInfo->tbInfo.qamOrder; msg3HqProc->tbInfo.iMcs = schUlSlotInfo->schPuschInfo->tbInfo.mcs; msg3HqProc->tbInfo.mcsTable = schUlSlotInfo->schPuschInfo->tbInfo.mcsTable; msg3HqProc->tbInfo.ndi = schUlSlotInfo->schPuschInfo->tbInfo.ndi; msg3HqProc->tbInfo.rv = schUlSlotInfo->schPuschInfo->tbInfo.rv; msg3HqProc->tbInfo.tbSzReq = schUlSlotInfo->schPuschInfo->tbInfo.tbSize; +#ifdef INTEL_FAPI msg3HqProc->dmrsMappingType = schUlSlotInfo->schPuschInfo->dmrsMappingType; msg3HqProc->nrOfDmrsSymbols = schUlSlotInfo->schPuschInfo->nrOfDmrsSymbols; msg3HqProc->dmrsAddPos = schUlSlotInfo->schPuschInfo->dmrsAddPos; +#endif } return schUlSlotInfo->schPuschInfo; } @@ -610,9 +607,9 @@ bool schProcessRaReq(Inst schInst, SchCellCb *cell, SlotTimingInfo currTime, uin for(k1TblIdx = 0; k1TblIdx < numK1; k1TblIdx++) { k1Index = k0K1InfoTbl->k0k1TimingInfo[dciTime.slot].k0Indexes[k0TblIdx].k1TimingInfo.k1Indexes[k1TblIdx]; - if(cell->raReq[ueId-1]->ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg.dlDataToUlAck) + if(cell->raReq[ueId-1]->ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.pucchCfg.dlDataToUlAck) { - k1 = cell->raReq[ueId-1]->ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg.dlDataToUlAck->\ + k1 = cell->raReq[ueId-1]->ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.pucchCfg.dlDataToUlAck->\ dlDataToUlAckList[k1Index]; } else @@ -711,8 +708,8 @@ bool schProcessRaReq(Inst schInst, SchCellCb *cell, SlotTimingInfo currTime, uin dciSlotAlloc->rarInfo.ulGrant.bwpSize = cell->cellCfg.schInitialUlBwp.bwp.freqAlloc.numPrb; /* Spec 38.213, section 8.2, 0 : MSG3 PUSCH will be transmitted without frequency hopping */ dciSlotAlloc->rarInfo.ulGrant.freqHopFlag = 0; - dciSlotAlloc->rarInfo.ulGrant.msg3FreqAlloc.startPrb = msg3PuschInfo->fdAlloc.startPrb; - dciSlotAlloc->rarInfo.ulGrant.msg3FreqAlloc.numPrb = msg3PuschInfo->fdAlloc.numPrb; + dciSlotAlloc->rarInfo.ulGrant.msg3FreqAlloc.startPrb = msg3PuschInfo->fdAlloc.resAlloc.type1.startPrb; + dciSlotAlloc->rarInfo.ulGrant.msg3FreqAlloc.numPrb = msg3PuschInfo->fdAlloc.resAlloc.type1.numPrb; dciSlotAlloc->rarInfo.ulGrant.k2Index = k2Index; dciSlotAlloc->rarInfo.ulGrant.mcs = msg3PuschInfo->tbInfo.mcs; dciSlotAlloc->rarInfo.ulGrant.tpc = 3; /* TODO : Check appropriate value to be filled */ @@ -774,7 +771,7 @@ bool schProcessRaReq(Inst schInst, SchCellCb *cell, SlotTimingInfo currTime, uin * * @details * - * Function : schProcessRachInd + * Function : SchProcRachInd * * This function process rach indication * @@ -782,17 +779,20 @@ bool schProcessRaReq(Inst schInst, SchCellCb *cell, SlotTimingInfo currTime, uin * @param[in] shed instance * @return ROK **/ -uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) +uint8_t SchProcRachInd(Pst *pst, RachIndInfo *rachInd) { - SchCellCb *cell = schCb[schInst].cells[schInst]; SchRaReq *raReq = NULLP; - float slotDuration; - uint8_t winNumSlots; - uint8_t ueId; + float slotDuration; + uint8_t winNumSlots; + uint8_t ueId; + Inst schInst = pst->dstInst-SCH_INST_START; + SchCellCb *cell = schCb[schInst].cells[schInst]; + + DU_LOG("\nINFO --> SCH : Received Rach indication"); if(cell == NULLP) { - DU_LOG("\nERROR --> SCH: Failed to find cell in schProcessRachInd"); + DU_LOG("\nERROR --> SCH: Failed to find cell in SchProcRachInd"); return RFAILED; } @@ -807,7 +807,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) SCH_ALLOC(raReq, sizeof(SchRaReq)); if(!raReq) { - DU_LOG("\nERROR --> SCH : Memory allocation failure in schProcessRachInd"); + DU_LOG("\nERROR --> SCH : Memory allocation failure in SchProcRachInd"); SCH_FREE(rachInd, sizeof(RachIndInfo)); return RFAILED; } @@ -834,8 +834,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst) cell->raReq[ueId -1] = raReq; /* Adding UE Id to list of pending UEs to be scheduled */ - addUeToBeScheduled(cell, ueId); - + cell->api->SchRachInd(cell, ueId); return ROK; } @@ -914,7 +913,7 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl pdcch->dci.beamPdcchInfo.digBfInterfaces = 0; pdcch->dci.beamPdcchInfo.prg[0].pmIdx = 0; pdcch->dci.beamPdcchInfo.prg[0].beamIdx[0] = 0; - pdcch->dci.txPdcchPower.powerValue = 0; + pdcch->dci.txPdcchPower.beta_pdcch_1_0 = 0; pdcch->dci.txPdcchPower.powerControlOffsetSS = 0; pdcch->dci.pdschCfg = pdsch; @@ -950,13 +949,13 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl pdsch->dmrs.dmrsAddPos = DMRS_ADDITIONAL_POS; pdsch->pdschTimeAlloc.rowIndex = k0Index; - pdsch->pdschTimeAlloc.timeAlloc.startSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[k0Index].startSymbol; - pdsch->pdschTimeAlloc.timeAlloc.numSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[k0Index].lengthSymbol; + pdsch->pdschTimeAlloc.startSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[k0Index].startSymbol; + pdsch->pdschTimeAlloc.numSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[k0Index].lengthSymbol; pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */ pdsch->pdschFreqAlloc.resourceAllocType = 1; /* RAT type-1 RIV format */ - pdsch->pdschFreqAlloc.freqAlloc.startPrb = MAX_NUM_RB; - pdsch->pdschFreqAlloc.freqAlloc.numPrb = \ + pdsch->pdschFreqAlloc.startPrb = MAX_NUM_RB; + pdsch->pdschFreqAlloc.numPrb = \ schCalcNumPrb(tbSize, mcs, initialBwp->pdschCommon.timeDomRsrcAllocList[k0Index].lengthSymbol); /* Find total symbols occupied including DMRS */ @@ -965,19 +964,19 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl * in that case only PDSCH symbols are marked as occupied */ if(dmrsStartSymbol == MAX_SYMB_PER_SLOT) { - startSymbol = pdsch->pdschTimeAlloc.timeAlloc.startSymb; - numSymbol = pdsch->pdschTimeAlloc.timeAlloc.numSymb; + startSymbol = pdsch->pdschTimeAlloc.startSymb; + numSymbol = pdsch->pdschTimeAlloc.numSymb; } /* If DMRS symbol is found, mark DMRS and PDSCH symbols as occupied */ else { startSymbol = dmrsStartSymbol; - numSymbol = pdsch->dmrs.nrOfDmrsSymbols + pdsch->pdschTimeAlloc.timeAlloc.numSymb; + numSymbol = pdsch->dmrs.nrOfDmrsSymbols + pdsch->pdschTimeAlloc.numSymb; } /* Allocate the number of PRBs required for RAR PDSCH */ if((allocatePrbDl(cell, rarTime, startSymbol, numSymbol,\ - &pdsch->pdschFreqAlloc.freqAlloc.startPrb, pdsch->pdschFreqAlloc.freqAlloc.numPrb)) != ROK) + &pdsch->pdschFreqAlloc.startPrb, pdsch->pdschFreqAlloc.numPrb)) != ROK) { DU_LOG("\nERROR --> SCH : allocatePrbDl() failed for RAR"); return RFAILED; @@ -998,7 +997,7 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl * * @details * - * Function : MacSchRachRsrcRel + * Function : SchProcRachRsrcRel * * This function processes RACH resorce release * from MAC after CFRA. It releases the dedicated @@ -1009,7 +1008,7 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl * @return ROK * RFAILED */ -uint8_t MacSchRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel) +uint8_t SchProcRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel) { uint8_t ret = ROK; uint8_t ssbIdx = 0, cfraSsbIdx = 0; @@ -1087,7 +1086,7 @@ void schMsg4Complete(SchUeCb *ueCb) { DU_LOG("\nINFO --> SCH: State change for ueId[%2d] to SCH_RA_STATE_MSG4_DONE\n",ueCb->ueId); ueCb->cellCb->raCb[ueCb->ueId-1].raState = SCH_RA_STATE_MSG4_DONE; - ueCb->msg4Proc = ueCb->retxMsg4HqProc = NULLP; + ueCb->msg4HqProc = ueCb->retxMsg4HqProc = NULLP; } /********************************************************************** End of file