X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch.c;h=8d8dba6b924daee6b3de736db9c1d71452601766;hb=22b9cbea0d857b740c9e7268e61262ac9c0c9bdc;hp=3c8d5fe3bc71f757c914fb8878921e9381bc243b;hpb=6fee61a10e1ad48ff7105b3201038ac8a337fd4a;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index 3c8d5fe3b..8d8dba6b9 100644 --- a/src/5gnrsch/sch.c +++ b/src/5gnrsch/sch.c @@ -710,13 +710,7 @@ uint8_t fillSchSib1Cfg(uint8_t mu, uint8_t bandwidth, uint8_t numSlots,SchPdcchC pdcch->dci.txPdcchPower.powerControlOffsetSS = 0; /* Storing pdschCfg pointer here. Required to access pdsch config while fillig up pdcch pdu */ - SCH_ALLOC(pdcch->dci.pdschCfg, sizeof(PdschCfg)); - if(pdcch->dci.pdschCfg == NULLP) - { - DU_LOG("\nERROR --> SCH : Memory allocation failed in %s ", __func__); - return RFAILED; - } - pdsch = pdcch->dci.pdschCfg; + pdsch = &pdcch->dci.pdschCfg; /* fill the PDSCH PDU */ uint8_t cwCount = 0; @@ -975,7 +969,6 @@ void deleteSchCellCb(SchCellCb *cellCb) SCH_FREE(cellCb->cellCfg.plmnInfoList[plmnIdx].snssai, cellCb->cellCfg.plmnInfoList[plmnIdx].numSliceSupport*sizeof(Snssai*)); } } - SCH_FREE(cellCb->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg, sizeof(PdschCfg)); for(uint16_t idx =0; idxcellCfg.dlCfgCommon.schFreqInfoDlSib.offsetToPointA; - broadcastPrbEnd = broadcastPrbStart + SCH_SSB_NUM_PRB + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.numPrb -1; + broadcastPrbEnd = broadcastPrbStart + SCH_SSB_NUM_PRB + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.numPrb -1; } else if(ssbOccasion) { @@ -1345,8 +1338,8 @@ uint8_t allocatePrbDl(SchCellCb *cell, SlotTimingInfo slotTime, \ } else if(sib1Occasion) { - broadcastPrbStart = cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.startPrb; - broadcastPrbEnd = broadcastPrbStart + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.numPrb -1; + broadcastPrbStart = cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.startPrb; + broadcastPrbEnd = broadcastPrbStart + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.numPrb -1; } /* Iterate through all free PRB blocks */ @@ -1614,7 +1607,7 @@ uint16_t searchLargestFreeBlock(SchCellCb *cell, SlotTimingInfo slotTime,uint16_ { reservedPrbStart = cell->cellCfg.dlCfgCommon.schFreqInfoDlSib.offsetToPointA; reservedPrbEnd = reservedPrbStart + SCH_SSB_NUM_PRB + \ - cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.numPrb -1; + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.numPrb -1; } else if(ssbOccasion) { @@ -1623,8 +1616,8 @@ uint16_t searchLargestFreeBlock(SchCellCb *cell, SlotTimingInfo slotTime,uint16_ } else if(sib1Occasion) { - reservedPrbStart = cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.startPrb; - reservedPrbEnd = reservedPrbStart + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg->pdschFreqAlloc.numPrb -1; + reservedPrbStart = cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.startPrb; + reservedPrbEnd = reservedPrbStart + cell->sib1SchCfg.sib1PdcchCfg.dci.pdschCfg.pdschFreqAlloc.numPrb -1; } else { @@ -1727,150 +1720,105 @@ void SchSendSliceCfgRspToMac(Inst inst, SchSliceCfgRsp sliceCfgRsp) MacMessageRouter(&rspPst, (void *)&sliceCfgRsp); } + /******************************************************************************* * - * @brief fill slice configuration response + * @brief This function is used to store or modify the slice configuration Sch DB * * @details * - * Function : fillSliceCfgRsp + * Function : addOrModifySliceCfgInSchDb * * Functionality: - * fill slice configuration response + * function is used to store or modify the slice configuration Sch DB * - * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count + * @params[in] SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, + * SchSliceCfgRsp cfgRsp, uint8_t count * * @return * ROK - Success * RFAILED - Failure * * ********************************************************************************/ -uint8_t fillSliceCfgRsp(bool sliceRecfg, SchSliceCfg *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq, SchSliceCfgRsp *schSliceCfgRsp, uint8_t *count) +uint8_t addSliceCfgInSchDb(CmLListCp *sliceCfgInDb, SchRrmPolicyOfSlice *cfgReq) { - bool sliceFound = false; - uint8_t cfgIdx = 0, sliceIdx = 0, plmnIdx = 0; + SchRrmPolicyOfSlice *sliceToStore; - schSliceCfgRsp->numSliceCfgRsp = schSliceCfgReq->numOfConfiguredSlice; - SCH_ALLOC(schSliceCfgRsp->listOfSliceCfgRsp, schSliceCfgRsp->numSliceCfgRsp * sizeof(SliceRsp*)); - if(schSliceCfgRsp->listOfSliceCfgRsp == NULLP) + SCH_ALLOC(sliceToStore, sizeof(SchRrmPolicyOfSlice)); + if(sliceToStore) { - DU_LOG("\nERROR --> SCH : Memory allocation failed at fillSliceCfgRsp"); - return RFAILED; + memcpy(&sliceToStore->snssai, &cfgReq->snssai, sizeof(Snssai)); + memcpy(&sliceToStore->rrmPolicyRatioInfo, &cfgReq->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio)); + addNodeToLList(sliceCfgInDb, sliceToStore, NULL); } - - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp ; cfgIdx++) + else { - sliceFound = false; - /* Here comparing the slice cfg request with the slice stored in cellCfg */ - if(sliceRecfg != true) - { - for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) - { - for(sliceIdx = 0; sliceIdxcellCfg.plmnInfoList[plmnIdx].numSliceSupport; sliceIdx++) - { - if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, cellCb->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai))) - { - (*count)++; - sliceFound = true; - break; - } - } - if(sliceFound == true) - { - break; - } - } - } - else - { - /* Here comparing the slice cfg request with the slice stored in SchDb */ - if(storedSliceCfg->listOfSlices) - { - for(sliceIdx = 0; sliceIdxnumOfSliceConfigured; sliceIdx++) - { - if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, &storedSliceCfg->listOfSlices[sliceIdx]->snssai,\ - sizeof(Snssai))) - { - (*count)++; - sliceFound = true; - break; - } - } - } - } - - SCH_ALLOC(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - if(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx] == NULLP) - { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in fillSliceCfgRsp"); - return RFAILED; - } - - - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai = schSliceCfgReq->listOfSlices[cfgIdx]->snssai; - if(sliceFound == true) - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = RSP_OK; - else - { - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = RSP_NOK; - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->cause = SLICE_NOT_FOUND; - } + DU_LOG("\nERROR --> SCH : Memory allocation failed in addOrModifySliceCfgInSchDb"); + return RFAILED; } return ROK; } /******************************************************************************* * - * @brief This function is used to store the slice configuration Sch DB + * @brief fill slice configuration response * * @details * - * Function : addSliceCfgInSchDb + * Function : fillSliceCfgRsp * * Functionality: - * function is used to store the slice configuration Sch DB + * fill slice configuration response * - * @params[in] SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, - * SchSliceCfgRsp cfgRsp, uint8_t count + * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count * * @return * ROK - Success * RFAILED - Failure * * ********************************************************************************/ -uint8_t addSliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, SchSliceCfgRsp cfgRsp, uint8_t count) +uint8_t fillSliceCfgRsp(Inst inst, CmLListCp *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq) { - uint8_t cfgIdx = 0, sliceIdx = 0; - - if(count) - { - storeSliceCfg->numOfSliceConfigured = count; - SCH_ALLOC(storeSliceCfg->listOfSlices, storeSliceCfg->numOfSliceConfigured * sizeof(SchRrmPolicyOfSlice*)); - if(storeSliceCfg->listOfSlices == NULLP) - { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in addSliceCfgInSchDb"); - return RFAILED; - } + SchMacRsp sliceFound; + uint8_t cfgIdx = 0, sliceIdx = 0, plmnIdx = 0, ret =ROK; + SchSliceCfgRsp schSliceCfgRsp; - for(cfgIdx = 0; cfgIdxnumOfSliceConfigured; cfgIdx++) + for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) + { + sliceFound = RSP_NOK; + /* Here comparing the slice cfg request with the slice stored in cellCfg */ + for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) { - if(cfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) + for(sliceIdx = 0; sliceIdxcellCfg.plmnInfoList[plmnIdx].numSliceSupport; sliceIdx++) { - SCH_ALLOC(storeSliceCfg->listOfSlices[sliceIdx], sizeof(SchRrmPolicyOfSlice)); - if(storeSliceCfg->listOfSlices[sliceIdx] == NULLP) + /* If we find the SliceCfgReq's SNSSAI in CellCb's SNSSAI DB, we mark this slice as configured and add it to Sch's DB. */ + if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, cellCb->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai))) { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in addSliceCfgInSchDb"); - return RFAILED; + if(addSliceCfgInSchDb(storedSliceCfg, schSliceCfgReq->listOfSlices[cfgIdx]) == ROK) + { + sliceFound = RSP_OK; + schSliceCfgRsp.cause = SUCCESSFUL; + } + else + { + DU_LOG("\nERROR --> SCH : Failed to store slice configuration in SchDb"); + schSliceCfgRsp.cause = RESOURCE_UNAVAILABLE; + ret = RFAILED; + } + plmnIdx = MAX_PLMN; + break; } - - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->snssai, &cfgReq->listOfSlices[sliceIdx]->snssai, sizeof(Snssai)); - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, &cfgReq->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, - sizeof(SchRrmPolicyRatio)); - sliceIdx++; } } + + if((sliceFound == RSP_NOK) && (schSliceCfgRsp.cause != RESOURCE_UNAVAILABLE)) + schSliceCfgRsp.cause = SLICE_NOT_FOUND; + + schSliceCfgRsp.snssai = schSliceCfgReq->listOfSlices[cfgIdx]->snssai; + schSliceCfgRsp.rsp = sliceFound; + SchSendSliceCfgRspToMac(inst, schSliceCfgRsp); } - return ROK; + return ret; } /******************************************************************************* @@ -1930,9 +1878,8 @@ void freeSchSliceCfgReq(SchSliceCfgReq *sliceCfgReq) * ********************************************************************************/ uint8_t SchProcSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq) { - uint8_t count = 0; + uint8_t ret = ROK; Inst inst = pst->dstInst - SCH_INST_START; - SchSliceCfgRsp sliceCfgRsp; DU_LOG("\nINFO --> SCH : Received Slice Cfg request from MAC"); if(schSliceCfgReq) @@ -1940,77 +1887,22 @@ uint8_t SchProcSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq) if(schSliceCfgReq->listOfSlices) { /* filling the slice configuration response of each slice */ - if(fillSliceCfgRsp(false, NULLP, schCb[inst].cells[0], schSliceCfgReq, &sliceCfgRsp, &count) != ROK) + if(fillSliceCfgRsp(inst, &schCb[inst].sliceCfg, schCb[inst].cells[0], schSliceCfgReq) != ROK) { DU_LOG("\nERROR --> SCH : Failed to fill the slice cfg rsp"); - return RFAILED; - } - - if(addSliceCfgInSchDb(&schCb[inst].sliceCfg, schSliceCfgReq, sliceCfgRsp, count) != ROK) - { - DU_LOG("\nERROR --> SCH : Failed to add slice cfg in sch database"); - return RFAILED; + ret = RFAILED; } freeSchSliceCfgReq(schSliceCfgReq); - SchSendSliceCfgRspToMac(inst, sliceCfgRsp); } } else { DU_LOG("\nERROR --> SCH : Received SchSliceCfgReq is NULL"); + ret = RFAILED; } - return ROK; + return ret; } -/******************************************************************************* - * - * @brief This function is used to store the slice reconfiguration Sch DB - * - * @details - * - * Function : modifySliceCfgInSchDb - * - * Functionality: - * function is used to store the slice re configuration Sch DB - * - * @params[in] Pst *pst, SchSliceCfgReq *schSliceCfgReq - * - * @return - * ROK - Success - * RFAILED - Failure - * - * ********************************************************************************/ -uint8_t modifySliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceRecfgReq *recfgReq, SchSliceRecfgRsp recfgRsp, uint8_t count) -{ - uint8_t cfgIdx = 0, sliceIdx = 0; - - if(count) - { - if(storeSliceCfg->listOfSlices == NULLP) - { - DU_LOG("\nINFO --> SCH : Memory allocation failed in modifySliceCfgInSchDb"); - return RFAILED; - } - - for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) - { - if(recfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) - { - for(sliceIdx = 0; sliceIdxnumOfSliceConfigured; sliceIdx++) - { - if(!memcmp(&storeSliceCfg->listOfSlices[sliceIdx]->snssai, &recfgReq->listOfSlices[cfgIdx]->snssai, sizeof(Snssai))) - { - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, &recfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo, - sizeof(SchRrmPolicyRatio)); - break; - } - } - } - } - } - freeSchSliceCfgReq(recfgReq); - return ROK; -} /******************************************************************************* * * @brief This function is used to send Slice re Cfg rsp to MAC @@ -2037,6 +1929,61 @@ void SchSendSliceRecfgRspToMac(Inst inst, SchSliceRecfgRsp schSliceRecfgRsp) MacMessageRouter(&rspPst, (void *)&schSliceRecfgRsp); } + +/******************************************************************************* + * + * @brief fill slice configuration response + * + * @details + * + * Function : fillSliceRecfgRsp + * + * Functionality: fill slice reconfiguration response + * + * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count + * + * @return + * ROK - Success + * RFAILED - Failure + * + * ********************************************************************************/ + +uint8_t fillSliceRecfgRsp(Inst inst, CmLListCp *storedSliceCfg, SchSliceRecfgReq *schSliceRecfgReq) +{ + SchMacRsp sliceFound; + uint8_t cfgIdx = 0; + SchRrmPolicyOfSlice *rrmPolicyOfSlices; + SchSliceRecfgRsp schSliceRecfgRsp; + + for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) + { + sliceFound = RSP_NOK; + /* Here comparing the slice recfg request with the StoredSliceCfg */ + CmLList *sliceCfg = storedSliceCfg->first; + + while(sliceCfg) + { + rrmPolicyOfSlices = (SchRrmPolicyOfSlice*)sliceCfg->node; + + if(rrmPolicyOfSlices && (memcmp(&schSliceRecfgReq->listOfSlices[cfgIdx]->snssai, &(rrmPolicyOfSlices->snssai), sizeof(Snssai)) == 0)) + { + memcpy(&rrmPolicyOfSlices->rrmPolicyRatioInfo, &schSliceRecfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio)); + sliceFound = RSP_OK; + break; + } + sliceCfg = sliceCfg->next; + } + + schSliceRecfgRsp.snssai = schSliceRecfgReq->listOfSlices[cfgIdx]->snssai; + schSliceRecfgRsp.rsp = sliceFound; + if(schSliceRecfgRsp.rsp == RSP_OK) + schSliceRecfgRsp.cause = SUCCESSFUL; + else + schSliceRecfgRsp.cause = SLICE_NOT_FOUND; + SchSendSliceRecfgRspToMac(inst, schSliceRecfgRsp); + } + return ROK; +} /******************************************************************************* * * @brief This function is used to store the slice reconfiguration Sch DB @@ -2057,9 +2004,8 @@ void SchSendSliceRecfgRspToMac(Inst inst, SchSliceRecfgRsp schSliceRecfgRsp) * ********************************************************************************/ uint8_t SchProcSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq) { - uint8_t count = 0; + uint8_t ret = ROK; Inst inst = pst->dstInst - SCH_INST_START; - SchSliceRecfgRsp schSliceRecfgRsp; DU_LOG("\nINFO --> SCH : Received Slice ReCfg request from MAC"); if(schSliceRecfgReq) @@ -2067,26 +2013,20 @@ uint8_t SchProcSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq) if(schSliceRecfgReq->listOfSlices) { /* filling the slice configuration response of each slice */ - if(fillSliceCfgRsp(true, &schCb[inst].sliceCfg, NULLP, schSliceRecfgReq, &schSliceRecfgRsp, &count) != ROK) + if(fillSliceRecfgRsp(inst, &schCb[inst].sliceCfg, schSliceRecfgReq) != ROK) { DU_LOG("\nERROR --> SCH : Failed to fill sch slice cfg response"); - return RFAILED; - } - - /* Modify the slice configuration stored in schCb */ - if(modifySliceCfgInSchDb(&schCb[inst].sliceCfg, schSliceRecfgReq, schSliceRecfgRsp, count) != ROK) - { - DU_LOG("\nERROR --> SCH : Failed to modify slice cfg of SchDb"); - return RFAILED; + ret = RFAILED; } - SchSendSliceRecfgRspToMac(inst, schSliceRecfgRsp); + freeSchSliceCfgReq(schSliceRecfgReq); } } else { DU_LOG("\nERROR --> SCH : Received SchSliceRecfgReq is NULL"); + } - return ROK; + return ret; } /**************************************************************************** @@ -2394,6 +2334,201 @@ RgMngmt *cfm return; } +/******************************************************************* + * + * @brief Processes DL CQI ind from MAC + * + * @details + * + * Function : SchProcDlCqiInd + * + * Functionality: + * Processes DL CQI ind from MAC + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t SchProcDlCqiInd(Pst *pst, SchDlCqiInd *dlCqiInd) +{ + uint8_t ret = ROK; + uint16_t ueId = 0, cellIdx = 0; + SchUeCb *ueCb = NULLP; + SchCellCb *cell = NULLP; + Inst inst = pst->dstInst-SCH_INST_START; + + if(!dlCqiInd) + { + DU_LOG("\nERROR --> SCH : SchProcDlCqiInd(): CQI Ind is empty"); + ret = RFAILED; + } + else + { + GET_CELL_IDX(dlCqiInd->cellId, cellIdx); + cell = schCb[inst].cells[cellIdx]; + if(cell == NULLP) + { + DU_LOG("\nERROR --> SCH : SchProcDlCqiInd(): cell Id[%d] not found", dlCqiInd->cellId); + ret = RFAILED; + } + else + { + if(cell->cellId == dlCqiInd->cellId) + { + GET_UE_ID(dlCqiInd->crnti, ueId); + ueCb = &cell->ueCb[ueId-1]; + if(ueCb->crnti != dlCqiInd->crnti) + { + DU_LOG("\nERROR --> SCH : SchProcDlCqiInd(): UeCb for received crnti[%d] not found", dlCqiInd->crnti); + ret = RFAILED; + } + else + { + /*TODO: complete the processing of DL CQI Ind*/ + } + } + else + { + DU_LOG("\nERROR --> SCH : SchProcDlCqiInd(): Received cell Id[%d] from MAC is not matching with CellID[%d] in SCH Cb",\ + dlCqiInd->cellId, cell->cellId); + ret = RFAILED; + } + } + } + return ret; +} + +/******************************************************************* + * + * @brief Processes UL CQI ind from MAC + * + * @details + * + * Function : SchProcUlCqiInd + * + * Functionality: + * Processes UL CQI ind from MAC + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t SchProcUlCqiInd(Pst *pst, SchUlCqiInd *ulCqiInd) +{ + uint8_t ret = ROK; + uint16_t ueId = 0, cellIdx = 0; + SchUeCb *ueCb = NULLP; + SchCellCb *cell = NULLP; + Inst inst = pst->dstInst-SCH_INST_START; + + if(!ulCqiInd) + { + DU_LOG("\nERROR --> SCH : SchProcUlCqiInd(): CQI Ind is empty"); + ret = RFAILED; + } + else + { + GET_CELL_IDX(ulCqiInd->cellId, cellIdx); + cell = schCb[inst].cells[cellIdx]; + if(cell == NULLP) + { + DU_LOG("\nERROR --> SCH : SchProcUlCqiInd(): cell Id[%d] not found", ulCqiInd->cellId); + ret = RFAILED; + } + else + { + if(cell->cellId == ulCqiInd->cellId) + { + GET_UE_ID(ulCqiInd->crnti, ueId); + ueCb = &cell->ueCb[ueId-1]; + if(ueCb->crnti != ulCqiInd->crnti) + { + DU_LOG("\nERROR --> SCH : SchProcUlCqiInd(): UeCb for received crnti[%d] not found",ulCqiInd->crnti); + ret = RFAILED; + } + else + { + /*TODO: complete the processing of UL CQI Ind*/ + } + } + else + { + DU_LOG("\nERROR --> SCH : SchProcUlCqiInd(): Received cell Id[%d] from MAC is not matching with CellId[%d] in SCH Cb",\ + ulCqiInd->cellId, cell->cellId); + ret = RFAILED; + } + } + } + return ret; +} + +/******************************************************************* + * + * @brief Processes PHR ind from MAC + * + * @details + * + * Function : SchProcPhrInd + * + * Functionality: + * Processes PHR ind from MAC + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t SchProcPhrInd(Pst *pst, SchPwrHeadroomInd *schPhrInd) +{ + uint8_t ret = ROK; + uint16_t ueId = 0, cellIdx = 0; + SchUeCb *ueCb = NULLP; + SchCellCb *cell = NULLP; + Inst inst = pst->dstInst-SCH_INST_START; + + if(!schPhrInd) + { + DU_LOG("\nERROR --> SCH : SchProcPhrInd(): PHR is empty"); + ret = RFAILED; + } + else + { + GET_CELL_IDX(schPhrInd->cellId, cellIdx); + cell = schCb[inst].cells[cellIdx]; + if(cell == NULLP) + { + DU_LOG("\nERROR --> SCH : schProcPhrInd(): cell Id[%d] is not found", schPhrInd->cellId); + ret = RFAILED; + } + else + { + if(cell->cellId == schPhrInd->cellId) + { + GET_UE_ID(schPhrInd->crnti, ueId); + ueCb = &cell->ueCb[ueId-1]; + if(ueCb->crnti != schPhrInd->crnti) + { + DU_LOG("\nERROR --> SCH : SchProcPhrInd(): UeCb for received crnti[%d] not found",schPhrInd->crnti); + ret = RFAILED; + } + else + { + /*TODO: complete the processing of PHR Ind*/ + } + } + else + { + DU_LOG("\nERROR --> SCH : SchProcPhrInd(): Mismatch between Received cell Id[%d] from MAC and CellID[%d] in SCH CB ",\ + schPhrInd->cellId, cell->cellId); + ret = RFAILED; + } + } + } + return ret; +} + /********************************************************************** End of file **********************************************************************/