X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch.c;h=03896c0b143626dbf806b3e0e91c22963d2742dd;hb=def50dc175cebc67238db5f1acd5ff322a2279bd;hp=a2c77ee274d3e143e7d424fdad8f1f26cf6ef42e;hpb=a5530e70a9d414952dadd1688aa9b4280c0dbb5a;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index a2c77ee27..03896c0b1 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[] = { @@ -83,7 +84,7 @@ uint8_t schActvInit(Ent entity, Inst instId, Region region, Reason reason) Inst inst = (instId - SCH_INST_START); /* Initialize the MAC TskInit structure to zero */ - cmMemset ((uint8_t *)&schCb[inst], 0, sizeof(schCb)); + memset ((uint8_t *)&schCb[inst], 0, sizeof(schCb)); /* Initialize the MAC TskInit with received values */ schCb[inst].schInit.ent = entity; @@ -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 */ @@ -112,12 +113,12 @@ uint8_t schActvInit(Ent entity, Inst instId, Region region, Reason reason) * reason for success/failure of this function. * * @param[in] RgCfg *cfg, the Configuaration information - * @return U16 + * @return uint16_t * -# LCM_REASON_NOT_APPL * -# LCM_REASON_INVALID_MSGTYPE * -# LCM_REASON_MEM_NOAVAIL **/ -PUBLIC U16 SchInstCfg(RgCfg *cfg, Inst dInst) +uint8_t SchInstCfg(RgCfg *cfg, Inst dInst) { uint16_t ret = LCM_REASON_NOT_APPL; Inst inst = (dInst - SCH_INST_START); @@ -129,8 +130,8 @@ PUBLIC U16 SchInstCfg(RgCfg *cfg, Inst dInst) return LCM_REASON_INVALID_MSGTYPE; } /* Update the Pst structure for LM interface */ - cmMemcpy((U8 *)&schCb[inst].schInit.lmPst, - (U8 *)&cfg->s.schInstCfg.genCfg.lmPst, + memcpy(&schCb[inst].schInit.lmPst, + &cfg->s.schInstCfg.genCfg.lmPst, sizeof(Pst)); schCb[inst].schInit.inst = inst; @@ -150,19 +151,19 @@ PUBLIC U16 SchInstCfg(RgCfg *cfg, Inst dInst) schCb[inst].genCfg.startCellId = cfg->s.schInstCfg.genCfg.startCellId; #if 0 /* Initialzie the timer queue */ - cmMemset((U8 *)&schCb[inst].tmrTq, 0, sizeof(CmTqType)*RGSCH_TQ_SIZE); + memset(&schCb[inst].tmrTq, 0, sizeof(CmTqType)*RGSCH_TQ_SIZE); /* Initialize the timer control point */ - cmMemset((U8 *)&schCb[inst].tmrTqCp, 0, sizeof(CmTqCp)); + memset(&schCb[inst].tmrTqCp, 0, sizeof(CmTqCp)); schCb[inst].tmrTqCp.tmrLen = RGSCH_TQ_SIZE; /* SS_MT_TMR needs to be enabled as schActvTmr needs instance information */ /* Timer Registration request to SSI */ - if (SRegTmrMt(schCb[inst].schInit.ent, dInst, - (S16)schCb[inst].genCfg.tmrRes, schActvTmr) != ROK) + if (ODU_REG_TMR_MT(schCb[inst].schInit.ent, dInst, + (int)schCb[inst].genCfg.tmrRes, schActvTmr) != ROK) { RLOG_ARG0(L_ERROR,DBG_INSTID,inst, "SchInstCfg(): Failed to " "register timer."); - RETVALUE(LCM_REASON_MEM_NOAVAIL); + return (LCM_REASON_MEM_NOAVAIL); } #endif /* Set Config done in TskInit */ @@ -190,10 +191,10 @@ PUBLIC U16 SchInstCfg(RgCfg *cfg, Inst dInst) * @return S16 * -# ROK **/ -int SchProcGenCfgReq(Pst *pst, RgMngmt *cfg) +uint8_t SchProcGenCfgReq(Pst *pst, RgMngmt *cfg) { - uint16_t ret = LCM_PRIM_OK; - uint16_t reason = LCM_REASON_NOT_APPL; + uint8_t ret = LCM_PRIM_OK; + uint16_t reason = LCM_REASON_NOT_APPL; RgMngmt cfm; Pst cfmPst; @@ -209,7 +210,7 @@ int SchProcGenCfgReq(Pst *pst, RgMngmt *cfg) memset(&cfmPst, 0 , sizeof(Pst)); SchFillCfmPst(pst, &cfmPst, cfg); - cmMemset((U8 *)&cfm, 0, sizeof(RgMngmt)); + memset(&cfm, 0, sizeof(RgMngmt)); #ifdef LMINT3 cfm.hdr.transId = @@ -248,7 +249,7 @@ int SchProcGenCfgReq(Pst *pst, RgMngmt *cfg) * * @details * - * Function : macSchSlotInd + * Function : MacSchSlotInd * * This API is invoked by PHY to indicate slot indication to Scheduler for * a cell. @@ -259,7 +260,7 @@ int SchProcGenCfgReq(Pst *pst, RgMngmt *cfg) * -# ROK * -# RFAILED **/ -uint8_t macSchSlotInd(Pst *pst, SlotIndInfo *slotInd) +uint8_t MacSchSlotInd(Pst *pst, SlotIndInfo *slotInd) { Inst inst = pst->dstInst-SCH_INST_START; @@ -267,7 +268,7 @@ uint8_t macSchSlotInd(Pst *pst, SlotIndInfo *slotInd) schProcessSlotInd(slotInd, inst); return ROK; -} /* macSchSlotInd */ +} /* MacSchSlotInd */ /******************************************************************* * @@ -275,7 +276,7 @@ uint8_t macSchSlotInd(Pst *pst, SlotIndInfo *slotInd) * * @details * - * Function : macSchRachInd + * Function : MacSchRachInd * * Functionality: * Processes Rach indication from MAC @@ -285,7 +286,7 @@ uint8_t macSchSlotInd(Pst *pst, SlotIndInfo *slotInd) * RFAILED - failure * * ****************************************************************/ -uint8_t macSchRachInd(Pst *pst, RachIndInfo *rachInd) +uint8_t MacSchRachInd(Pst *pst, RachIndInfo *rachInd) { Inst inst = pst->dstInst-SCH_INST_START; DU_LOG("\nSCH : Received Rach indication"); @@ -299,7 +300,7 @@ uint8_t macSchRachInd(Pst *pst, RachIndInfo *rachInd) * * @details * - * Function : macSchCrcInd + * Function : MacSchCrcInd * * Functionality: * Processes CRC indication from MAC @@ -310,7 +311,7 @@ uint8_t macSchRachInd(Pst *pst, RachIndInfo *rachInd) * RFAILED - failure * * ****************************************************************/ -uint8_t macSchCrcInd(Pst *pst, CrcIndInfo *crcInd) +uint8_t MacSchCrcInd(Pst *pst, CrcIndInfo *crcInd) { switch(crcInd->crcInd[0]) { @@ -333,7 +334,7 @@ uint8_t macSchCrcInd(Pst *pst, CrcIndInfo *crcInd) * * @details * - * Function : InitSchCellCb + * Function : schInitCellCb * * This API is invoked after receiving schCellCfg * @@ -343,13 +344,13 @@ uint8_t macSchCrcInd(Pst *pst, CrcIndInfo *crcInd) * -# ROK * -# RFAILED **/ -int InitSchCellCb(Inst inst, SchCellCfg *schCellCfg) +uint8_t schInitCellCb(Inst inst, SchCellCfg *schCellCfg) { SchCellCb *cell; SCH_ALLOC(cell, sizeof(SchCellCb)); if(!cell) { - DU_LOG("\nMemory allocation failed in InitSchCellCb"); + DU_LOG("\nMemory allocation failed in schInitCellCb"); return RFAILED; } @@ -375,7 +376,7 @@ int InitSchCellCb(Inst inst, SchCellCfg *schCellCfg) SCH_ALLOC(schDlSlotInfo, sizeof(SchDlSlotInfo)); if(!schDlSlotInfo) { - DU_LOG("\nMemory allocation failed in InitSchCellCb"); + DU_LOG("\nMemory allocation failed in schInitCellCb"); return RFAILED; } @@ -383,26 +384,12 @@ int InitSchCellCb(Inst inst, SchCellCfg *schCellCfg) SCH_ALLOC(schUlSlotInfo, sizeof(SchUlSlotInfo)); if(!schUlSlotInfo) { - DU_LOG("\nMemory allocation failed in InitSchCellCb"); + DU_LOG("\nMemory allocation failed in schInitCellCb"); return RFAILED; } - memset(schDlSlotInfo, 0, sizeof(SchDlSlotInfo)); - memset(schUlSlotInfo, 0, sizeof(SchUlSlotInfo)); - - schDlSlotInfo->totalPrb = schUlSlotInfo->totalPrb = MAX_NUM_RB; - - for(uint8_t itr=0; itrassignedPrb[itr] = 0; - schUlSlotInfo->assignedPrb[itr] = 0; - } - schUlSlotInfo->schPuschInfo = NULLP; - - for(uint8_t itr=0; itrssbInfo[itr], 0, sizeof(SsbInfo)); - } + schInitDlSlot(schDlSlotInfo); + schInitUlSlot(schUlSlotInfo); cell->schDlSlotInfo[idx] = schDlSlotInfo; cell->schUlSlotInfo[idx] = schUlSlotInfo; @@ -476,7 +463,7 @@ void fillSchSib1Cfg(Inst schInst, SchSib1Cfg *sib1SchCfg, uint16_t pci, \ sib1SchCfg->n0 = slotIndex; /* calculate the PRBs */ - schAllocFreqDomRscType0(((offsetPointA-offset)/6), (numRbs/6), FreqDomainResource); + freqDomRscAllocType0(((offsetPointA-offset)/6), (numRbs/6), FreqDomainResource); /* fill BWP */ bwp->freqAlloc.numPrb = MAX_NUM_RB; /* whole of BW */ @@ -485,16 +472,16 @@ void fillSchSib1Cfg(Inst schInst, SchSib1Cfg *sib1SchCfg, uint16_t pci, \ bwp->cyclicPrefix = 0; /* normal */ /* fill the PDCCH PDU */ - pdcch->coreset0Cfg.coreSet0Size = 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; @@ -628,7 +615,7 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg) Pst rspPst; Inst inst = pst->dstInst-1; - InitSchCellCb(inst, schCellCfg); + schInitCellCb(inst, schCellCfg); cellCb = schCb[inst].cells[inst]; //cells is of MAX_CELLS, why inst cellCb->macInst = pst->srcInst; @@ -640,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); @@ -660,7 +651,7 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg) * * @details * - * Function : macSchDlRlcBoInfo + * Function : MacSchDlRlcBoInfo * * Functionality: * Processes DL RLC BO info from MAC @@ -670,41 +661,130 @@ 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"); + cell = schCb[inst].cells[inst]; - SchCellCb *cell = schCb[inst].cells[inst]; - SchDlSlotInfo *schDlSlotInfo = \ - cell->schDlSlotInfo[(cell->slotInfo.slot + SCHED_DELTA + PHY_DELTA + MSG4_DELAY) % SCH_NUM_SLOTS]; + 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->dlInfo.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; } +/******************************************************************* + * + * @brief Processes BSR indiation from MAC + * + * @details + * + * Function : MacSchBsr + * + * Functionality: + * Processes DL BSR from MAC + * + * @params[in] Pst pst + * UlBufferStatusRptInd bsrInd + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t MacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd) +{ + Inst schInst = pst->dstInst-SCH_INST_START; + SchCellCb *cellCb = NULLP; + SchUeCb *ueCb = NULLP; + uint8_t lcgIdx; + + DU_LOG("\nSCH : Received BSR"); + cellCb = schCb[schInst].cells[schInst]; + ueCb = schGetUeCb(cellCb, bsrInd->crnti); + + /* store dataVolume per lcg in uecb */ + for(lcgIdx = 0; lcgIdx < bsrInd->numLcg; lcgIdx++) + { + ueCb->bsrInfo[lcgIdx].priority = 1; //TODO: determining LCG priority? + ueCb->bsrInfo[lcgIdx].dataVol = bsrInd->dataVolInfo[lcgIdx].dataVol; + } + return ROK; +} + +/******************************************************************* + * + * @brief Processes SR UCI indication from MAC + * + * @details + * + * Function : MacSchSrUciInd + * + * Functionality: + * Processes SR UCI indication from MAC + * + * @params[in] Post structure + * UCI Indication + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd) +{ + Inst inst = pst->dstInst-SCH_INST_START; + + SchUeCb *ueCb; + SchCellCb *cellCb = schCb[inst].cells[inst]; + + DU_LOG("\nSCH : Received SR"); + + ueCb = schGetUeCb(cellCb, uciInd->crnti); + + if(uciInd->numSrBits) + { + ueCb->srRcvd = true; + } + return ROK; +} /********************************************************************** End of file **********************************************************************/