X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch.c;h=7b1199f19b47451b2c6273920d6672d250783a0a;hb=7b22b6a99c6942021b2ac30383cd46d93d9354a6;hp=583cce7287c721c4903e48bdad05cfb83b270613;hpb=0a26c487f1b6bbb5217e47b15fa8273b2e749283;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index 583cce728..7b1199f19 100644 --- a/src/5gnrsch/sch.c +++ b/src/5gnrsch/sch.c @@ -50,6 +50,7 @@ extern SchCb schCb[SCH_MAX_INST]; void SchFillCfmPst(Pst *reqPst,Pst *cfmPst,RgMngmt *cfm); + /* local defines */ SchCellCfgCfmFunc SchCellCfgCfmOpts[] = { @@ -95,7 +96,7 @@ uint8_t schActvInit(Ent entity, Inst instId, Region region, Reason reason) schCb[inst].schInit.acnt = FALSE; schCb[inst].schInit.usta = FALSE; schCb[inst].schInit.trc = FALSE; - schCb[inst].schInit.procId = SFndProcId(); + schCb[inst].schInit.procId = ODU_GET_PROCID(); return ROK; } /* schActvInit */ @@ -471,16 +472,16 @@ void fillSchSib1Cfg(Inst schInst, SchSib1Cfg *sib1SchCfg, uint16_t pci, \ bwp->cyclicPrefix = 0; /* normal */ /* fill the PDCCH PDU */ - pdcch->coreset0Cfg.coreSetSize = numRbs; - 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.coreSetSize = numRbs; + pdcch->coresetCfg.startSymbolIndex = firstSymbol; + pdcch->coresetCfg.durationSymbols = numSymbols; + memcpy(pdcch->coresetCfg.freqDomainResource,FreqDomainResource,6); + 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 = SI_RNTI; pdcch->dci.scramblingId = pci; @@ -626,6 +627,10 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg) schCellCfg->ssbSchCfg.ssbOffsetPointA); memcpy(&cellCb->cellCfg, schCellCfg, sizeof(SchCellCfg)); + /* Initializing global variables */ + cellCb->actvUeBitMap = 0; + cellCb->boIndBitMap = 0; + /* Fill and send Cell config confirm */ memset(&rspPst, 0, sizeof(Pst)); FILL_PST_SCH_TO_MAC(rspPst, pst->dstInst); @@ -656,37 +661,56 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg) * RFAILED - failure * * ****************************************************************/ -uint8_t MacSchDlRlcBoInfo(Pst *pst, DlRlcBOInfo *dlBoInfo) +uint8_t MacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo) { - uint16_t lcIdx; + uint8_t lcId = 0; + uint16_t ueIdx = 0; + uint16_t slot; + SchUeCb *ueCb = NULLP; + SchCellCb *cell = NULLP; + SchDlSlotInfo *schDlSlotInfo = NULLP; + Inst inst = pst->dstInst-SCH_INST_START; DU_LOG("\nSCH : Received RLC BO Status indication"); - SchCellCb *cell = schCb[inst].cells[inst]; - SchDlSlotInfo *schDlSlotInfo = \ - cell->schDlSlotInfo[(cell->slotInfo.slot + SCHED_DELTA + PHY_DELTA + MSG4_DELAY) % SCH_NUM_SLOTS]; + cell = schCb[inst].cells[inst]; + + GET_UE_IDX(dlBoInfo->crnti, ueIdx); + ueCb = &cell->ueCb[ueIdx-1]; + lcId = dlBoInfo->lcId; - for(lcIdx = 0; lcIdx < dlBoInfo->numLc; lcIdx++) + if(lcId == SRB1_LCID || lcId == SRB2_LCID || lcId == SRB3_LCID || \ + (lcId >= MIN_DRB_LCID && lcId <= MAX_DRB_LCID)) { - if(dlBoInfo->boInfo[lcIdx].lcId == CCCH_LCID) - { - SCH_ALLOC(schDlSlotInfo->msg4Info, sizeof(Msg4Info)); - if(!schDlSlotInfo->msg4Info) - { - DU_LOG("\nSCH : Memory allocation failed for msg4Info"); - schDlSlotInfo = NULL; - return RFAILED; - } - schDlSlotInfo->msg4Info->crnti = dlBoInfo->crnti; - schDlSlotInfo->msg4Info->ndi = 1; - schDlSlotInfo->msg4Info->harqProcNum = 0; - schDlSlotInfo->msg4Info->dlAssignIdx = 0; - schDlSlotInfo->msg4Info->pucchTpc = 0; - schDlSlotInfo->msg4Info->pucchResInd = 0; - schDlSlotInfo->msg4Info->harqFeedbackInd = 0; - schDlSlotInfo->msg4Info->dciFormatId = 1; - } + SET_ONE_BIT(ueIdx, cell->boIndBitMap); + ueCb->dlLcCtxt[lcId].bo = dlBoInfo->dataVolume; + } + else if(lcId != SRB0_LCID) + { + DU_LOG("\nSCH : Invalid LC Id %d in MacSchDlRlcBoInfo", lcId); + return RFAILED; + } + + slot = (cell->slotInfo.slot + SCHED_DELTA + PHY_DELTA + BO_DELTA) % SCH_NUM_SLOTS; + schDlSlotInfo = cell->schDlSlotInfo[slot]; + + SCH_ALLOC(schDlSlotInfo->dlMsgInfo, sizeof(DlMsgInfo)); + if(!schDlSlotInfo->dlMsgInfo) + { + DU_LOG("\nSCH : Memory allocation failed for dlMsgInfo"); + schDlSlotInfo = NULL; + return RFAILED; } + schDlSlotInfo->dlMsgInfo->crnti = dlBoInfo->crnti; + schDlSlotInfo->dlMsgInfo->ndi = 1; + schDlSlotInfo->dlMsgInfo->harqProcNum = 0; + schDlSlotInfo->dlMsgInfo->dlAssignIdx = 0; + schDlSlotInfo->dlMsgInfo->pucchTpc = 0; + schDlSlotInfo->dlMsgInfo->pucchResInd = 0; + schDlSlotInfo->dlMsgInfo->harqFeedbackInd = 0; + schDlSlotInfo->dlMsgInfo->dciFormatId = 1; + if(lcId == SRB0_LCID) + schDlSlotInfo->dlMsgInfo->isMsg4Pdu = true; return ROK; }