};
-SchSliceReCfgRspFunc SchSliceReCfgRspOpts[] =
+SchSliceRecfgRspFunc SchSliceRecfgRspOpts[] =
{
- packSchSliceReCfgRsp, /* LC */
- MacProcSchSliceReCfgRsp, /* TC */
- packSchSliceReCfgRsp /* LWLC */
+ packSchSliceRecfgRsp, /* LC */
+ MacProcSchSliceRecfgRsp, /* TC */
+ packSchSliceRecfgRsp /* LWLC */
};
/**
* ****************************************************************/
uint8_t MacSchCrcInd(Pst *pst, CrcIndInfo *crcInd)
{
+ Inst inst = pst->dstInst-SCH_INST_START;
#ifdef CALL_FLOW_DEBUG_LOG
DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_CRC_IND_TO_SCH\n");
#endif
- switch(crcInd->crcInd[0])
- {
- case CRC_FAILED:
- DU_LOG("\nDEBUG --> SCH : Received CRC indication. CRC Status [FAILURE]");
- break;
- case CRC_PASSED:
- DU_LOG("\nDEBUG --> SCH : Received CRC indication. CRC Status [PASS]");
- break;
- default:
- DU_LOG("\nDEBUG --> SCH : Invalid CRC state %d", crcInd->crcInd[0]);
- return RFAILED;
- }
+ schProcessCrcInd(crcInd, inst);
return ROK;
}
cellCb->actvUeBitMap = 0;
cellCb->boIndBitMap = 0;
+ cellCb->cellCfg.schHqCfg.maxDlDataHqTx = SCH_MAX_NUM_DL_HQ_TX;
+ cellCb->cellCfg.schHqCfg.maxMsg4HqTx = SCH_MAX_NUM_MSG4_TX;
+ cellCb->cellCfg.schHqCfg.maxUlDataHqTx = SCH_MAX_NUM_UL_HQ_TX;
+ cellCb->cellCfg.schRachCfg.maxMsg3Tx = SCH_MAX_NUM_MSG3_TX;
+
/* Fill and send Cell config confirm */
memset(&rspPst, 0, sizeof(Pst));
FILL_PST_SCH_TO_MAC(rspPst, pst->dstInst);
bool isLcIdValid = false;
SchUeCb *ueCb = NULLP;
SchCellCb *cell = NULLP;
- Inst inst = pst->dstInst-SCH_INST_START;
- CmLListCp *lcLL = NULLP;
+ Inst inst = pst->dstInst-SCH_INST_START;
#ifdef CALL_FLOW_DEBUG_LOG
DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_DL_RLC_BO_INFO_TO_SCH\n");
-#endif
-
+#endif
DU_LOG("\nDEBUG --> SCH : Received RLC BO Status indication LCId [%d] BO [%d]", dlBoInfo->lcId, dlBoInfo->dataVolume);
cell = schCb[inst].cells[inst];
*Thus clearing out the LC from the Lc priority list*/
if(dlBoInfo->dataVolume == 0)
{
- /*Check the LC is Dedicated or default and accordingly LCList will
- * be used*/
- if(ueCb->dlInfo.dlLcCtxt[lcId].isDedicated)
- {
- lcLL = &(ueCb->dlLcPrbEst.dedLcInfo->dedLcList);
- }
- else
- {
- lcLL = &(ueCb->dlLcPrbEst.defLcList);
- }
- handleLcLList(lcLL, lcId, DELETE);
+ /* TODO : Check the LC is Dedicated or default and accordingly LCList
+ * will be used*/
return ROK;
}
if(lcId == SRB0_LCID)
{
cell->raCb[ueId -1].msg4recvd = true;
- cell->raCb[ueId -1].dlMsgPduLen = dlBoInfo->dataVolume;
-
+ cell->raCb[ueId -1].dlMsgPduLen = dlBoInfo->dataVolume;
}
else
{
+ /* TODO : These part of changes will be corrected during DL scheduling as
+ * per K0 - K1 -K2 */
SET_ONE_BIT(ueId, cell->boIndBitMap);
if(ueCb->dlInfo.dlLcCtxt[lcId].lcId == lcId)
{
return RFAILED;
}
}
-
/* Adding UE Id to list of pending UEs to be scheduled */
addUeToBeScheduled(cell, ueId);
return ROK;
}
if(uciInd->numSrBits)
{
- ueCb->srRcvd = true;
-
+ ueCb->srRcvd = true;
/* Adding UE Id to list of pending UEs to be scheduled */
addUeToBeScheduled(cellCb, ueCb->ueId);
}
return ROK;
}
+/*******************************************************************
+ *
+ * @brief Processes DL HARQ indication from MAC
+ *
+ * @details
+ *
+ * Function : MacSchDlHarqInd
+ *
+ * Functionality:
+ * Processes DL HARQ indication from MAC
+ *
+ * @params[in] Post structure
+ * DL HARQ Indication
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t MacSchDlHarqInd(Pst *pst, DlHarqInd *dlHarqInd)
+{
+ Inst inst = pst->dstInst-SCH_INST_START;
+ SchUeCb *ueCb;
+ SchCellCb *cellCb = schCb[inst].cells[inst];
+
+#ifdef CALL_FLOW_DEBUG_LOG
+ DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_DL_HARQ_IND_TO_SCH\n");
+#endif
+
+ DU_LOG("\nDEBUG --> SCH : Received HARQ");
+
+ ueCb = schGetUeCb(cellCb, dlHarqInd->crnti);
+
+ if(ueCb->state == SCH_UE_STATE_INACTIVE)
+ {
+ DU_LOG("\nERROR --> SCH : Crnti %d is inactive", dlHarqInd->crnti);
+ return ROK;
+ }
+
+ schUpdateHarqFdbk(ueCb, dlHarqInd->numHarq, dlHarqInd->harqPayload, &dlHarqInd->slotInd);
+
+ return ROK;
+}
+
/*******************************************************************
*
* @brief Allocates requested PRBs for DL
* RFAILED - Failure
*
* ********************************************************************************/
-uint8_t fillSliceCfgRsp(bool sliceReCfg, SchSliceCfg *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq, SchSliceCfgRsp *schSliceCfgRsp, uint8_t *count)
+uint8_t fillSliceCfgRsp(bool sliceRecfg, SchSliceCfg *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq, SchSliceCfgRsp *schSliceCfgRsp, uint8_t *count)
{
bool sliceFound = false;
uint8_t cfgIdx = 0, sliceIdx = 0;
{
sliceFound = false;
/* Here comparing the slice cfg request with the slice stored in cellCfg */
- if(sliceReCfg != true)
+ if(sliceRecfg != true)
{
for(sliceIdx = 0; sliceIdx<cellCb->cellCfg.plmnInfoList.numSliceSupport; sliceIdx++)
{
* ROK - Success
* RFAILED - Failure
* ********************************************************************************/
-void freeSchSliceCfgReq(SchSliceCfgReq *cfgReq)
+void freeSchSliceCfgReq(SchSliceCfgReq *sliceCfgReq)
{
uint8_t cfgIdx = 0;
- if(cfgReq)
+ if(sliceCfgReq)
{
- if(cfgReq->numOfConfiguredSlice)
+ if(sliceCfgReq->numOfConfiguredSlice)
{
- for(cfgIdx = 0; cfgIdx<cfgReq->numOfConfiguredSlice; cfgIdx++)
+ for(cfgIdx = 0; cfgIdx<sliceCfgReq->numOfConfiguredSlice; cfgIdx++)
{
- if(cfgReq->listOfConfirguration[cfgIdx])
+ if(sliceCfgReq->listOfConfirguration[cfgIdx])
{
- SCH_FREE(cfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio));
- SCH_FREE(cfgReq->listOfConfirguration[cfgIdx], sizeof(SchRrmPolicyOfSlice));
+ SCH_FREE(sliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio));
+ SCH_FREE(sliceCfgReq->listOfConfirguration[cfgIdx], sizeof(SchRrmPolicyOfSlice));
}
}
- SCH_FREE(cfgReq->listOfConfirguration, cfgReq->numOfConfiguredSlice * sizeof(SchRrmPolicyOfSlice*));
+ SCH_FREE(sliceCfgReq->listOfConfirguration, sliceCfgReq->numOfConfiguredSlice * sizeof(SchRrmPolicyOfSlice*));
}
- SCH_FREE(cfgReq, sizeof(SchSliceCfgReq));
+ SCH_FREE(sliceCfgReq, sizeof(SchSliceCfgReq));
}
}
/*******************************************************************************
* RFAILED - Failure
*
* ********************************************************************************/
-uint8_t modifySliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, SchSliceCfgRsp cfgRsp, uint8_t count)
+uint8_t modifySliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceRecfgReq *recfgReq, SchSliceRecfgRsp recfgRsp, uint8_t count)
{
uint8_t cfgIdx = 0, sliceIdx = 0;
return RFAILED;
}
- for(cfgIdx = 0; cfgIdx<cfgReq->numOfConfiguredSlice; cfgIdx++)
+ for(cfgIdx = 0; cfgIdx<recfgReq->numOfConfiguredSlice; cfgIdx++)
{
- if(cfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK)
+ if(recfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK)
{
for(sliceIdx = 0; sliceIdx<storeSliceCfg->numOfSliceConfigured; sliceIdx++)
{
- if(!memcmp(&storeSliceCfg->listOfConfirguration[sliceIdx]->snssai, &cfgReq->listOfConfirguration[cfgIdx]->snssai, sizeof(Snssai)))
+ if(!memcmp(&storeSliceCfg->listOfConfirguration[sliceIdx]->snssai, &recfgReq->listOfConfirguration[cfgIdx]->snssai, sizeof(Snssai)))
{
- memcpy(storeSliceCfg->listOfConfirguration[sliceIdx]->rrmPolicyRatioInfo, cfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo,
+ memcpy(storeSliceCfg->listOfConfirguration[sliceIdx]->rrmPolicyRatioInfo, recfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo,
sizeof(SchRrmPolicyRatio));
break;
}
}
}
}
- freeSchSliceCfgReq(cfgReq);
+ freeSchSliceCfgReq(recfgReq);
return ROK;
}
/*******************************************************************************
*
* @details
*
- * Function : SchSendSliceCfgRspToMac
+ * Function : SchSendSliceRecfgRspToMac
*
* Functionality:
* function is used to send Slice re Cfg rsp to MAC
*
- * @params[in] Pst *pst, SchSliceCfgRsp schSliceReCfgRsp
+ * @params[in] Pst *pst, SchSliceRecfgRsp schSliceRecfgRsp
*
* @return- void
*
* ********************************************************************************/
-void SchSendSliceReCfgRspToMac(Inst inst, SchSliceCfgRsp schSliceReCfgRsp)
+void SchSendSliceRecfgRspToMac(Inst inst, SchSliceRecfgRsp schSliceRecfgRsp)
{
Pst rspPst;
FILL_PST_SCH_TO_MAC(rspPst, inst);
rspPst.event = EVENT_SLICE_RECFG_RSP_TO_MAC;
- SchSliceReCfgRspOpts[rspPst.selector](&rspPst, &schSliceReCfgRsp);
+ SchSliceRecfgRspOpts[rspPst.selector](&rspPst, &schSliceRecfgRsp);
}
/*******************************************************************************
*
*
* @details
*
- * Function : MacSchSliceReCfgReq
+ * Function : MacSchSliceRecfgReq
*
* Functionality:
* function is used to store the slice re configuration Sch DB
*
- * @params[in] Pst *pst, SchSliceCfgReq *schSliceReCfgReq
+ * @params[in] Pst *pst, SchSliceRecfgReq *schSliceRecfgReq
*
* @return
* ROK - Success
* RFAILED - Failure
*
* ********************************************************************************/
-uint8_t MacSchSliceReCfgReq(Pst *pst, SchSliceCfgReq *schSliceReCfgReq)
+uint8_t MacSchSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq)
{
uint8_t count = 0;
Inst inst = pst->dstInst - SCH_INST_START;
- SchSliceCfgRsp schSliceReCfgRsp;
+ SchSliceRecfgRsp schSliceRecfgRsp;
DU_LOG("\nINFO --> SCH : Received Slice ReCfg request from MAC");
- if(schSliceReCfgReq)
+ if(schSliceRecfgReq)
{
- if(schSliceReCfgReq->listOfConfirguration)
+ if(schSliceRecfgReq->listOfConfirguration)
{
/* filling the slice configuration response of each slice */
- if(fillSliceCfgRsp(true, &schCb[inst].sliceCfg, NULLP, schSliceReCfgReq, &schSliceReCfgRsp, &count) != ROK)
+ if(fillSliceCfgRsp(true, &schCb[inst].sliceCfg, NULLP, schSliceRecfgReq, &schSliceRecfgRsp, &count) != 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)
+ if(modifySliceCfgInSchDb(&schCb[inst].sliceCfg, schSliceRecfgReq, schSliceRecfgRsp, count) != ROK)
{
DU_LOG("\nERROR --> SCH : Failed to modify slice cfg of SchDb");
return RFAILED;
}
- SchSendSliceReCfgRspToMac(inst, schSliceReCfgRsp);
+ SchSendSliceRecfgRspToMac(inst, schSliceRecfgRsp);
}
}
else
{
- DU_LOG("\nERROR --> SCH : Received SchSliceCfgReq is NULL");
+ DU_LOG("\nERROR --> SCH : Received SchSliceRecfgReq is NULL");
}
return ROK;
}
while(firstNodeOfList)
{
tempNode = (SchPageInfo*)(firstNodeOfList->node);
- if ((recvdNode->TxTime.slot < tempNode->TxTime.slot))
+ if ((recvdNode->pageTxTime.slot < tempNode->pageTxTime.slot))
{
cmLListInsCrnt(storedPageList, currentNodeInfo);
break;
}
- else if ((recvdNode->TxTime.slot == tempNode->TxTime.slot))
+ else if ((recvdNode->pageTxTime.slot == tempNode->pageTxTime.slot))
{
- DU_LOG("\nERROR --> SCH : schAddPagingIndtoList() : Slot[%d] is already present in the list", recvdNode->TxTime.slot);
+ DU_LOG("\nERROR --> SCH : schAddPagingIndtoList() : Slot[%d] is already present in the list", recvdNode->pageTxTime.slot);
return RFAILED;
}
else
{
cmLListAdd2Tail(storedPageList, currentNodeInfo);
}
- DU_LOG("\nINFO --> SCH : Paging information is stored sucessfully");
+ DU_LOG("\nDEBUG --> SCH : Paging information is stored successfully for PF:%d, Slot:%d",\
+ recvdNode->pageTxTime.sfn, recvdNode->pageTxTime.slot);
return ROK;
}
if(pageInd)
{
- DU_LOG("\nINFO --> SCH : Received paging indication form MAC for cellId[%d]",pageInd->cellId);
+ DU_LOG("\nDEBUG --> SCH : Received paging indication from MAC for cellId[%d]",\
+ pageInd->cellId);
/* Fetch Cell CB */
for(cellIdx = 0; cellIdx < MAX_NUM_CELL; cellIdx++)
{
pageInfo->pf = pageInd->pf;
pageInfo->i_s = pageInd->i_s;
- pageInfo->TxTime.cellId = pageInd->cellId;
- pageInfo->TxTime.sfn = (pageInd->pf + cellCb->pageCb.pagMonOcc[pageInd->i_s].frameOffset) % MAX_SFN;
- pageInfo->TxTime.slot = cellCb->pageCb.pagMonOcc[pageInd->i_s].pagingOccSlot;
+ pageInfo->pageTxTime.cellId = pageInd->cellId;
+ pageInfo->pageTxTime.sfn = (pageInd->pf + cellCb->pageCb.pagMonOcc[pageInd->i_s].frameOffset) % MAX_SFN;
+ pageInfo->pageTxTime.slot = cellCb->pageCb.pagMonOcc[pageInd->i_s].pagingOccSlot;
pageInfo->mcs = DEFAULT_MCS;
pageInfo->msgLen = pageInd->pduLen;
SCH_ALLOC(pageInfo->pagePdu, pageInfo->msgLen);
else
{
memcpy(pageInfo->pagePdu, pageInd->pagePdu, pageInfo->msgLen);
- ret = schAddPagingIndtoList(&cellCb->pageCb.pageIndInfoRecord[pageInfo->TxTime.sfn], pageInfo);
+ ret = schAddPagingIndtoList(&cellCb->pageCb.pageIndInfoRecord[pageInfo->pageTxTime.sfn], pageInfo);
if(ret != ROK)
{
DU_LOG("\nERROR --> SCH : MacSchPagingInd(): Failed to store paging record");