macCellGrpCfg->phrCfg.modeOtherCG = macCellGrp.phrCfg.phrOtherCG;
}
+#ifdef NR_DRX
+ /* Copy Drx configuration */
+ macCellGrpCfg->drxCfgPresent = true;
+ macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationTimerValInMs = macCellGrp.drxCfg.drxOnDurationTimer.onDurationTimerValInMs;
+ if(!macCellGrp.drxCfg.drxOnDurationTimer.onDurationTimerValInMs)
+ macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = \
+ macCellGrp.drxCfg.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds;
+ else
+ macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationtimerValue.milliSeconds = \
+ macCellGrp.drxCfg.drxOnDurationTimer.onDurationtimerValue.milliSeconds;
+ macCellGrpCfg->drxCfg.drxInactivityTimer = macCellGrp.drxCfg.drxInactivityTimer;
+ macCellGrpCfg->drxCfg.drxHarqRttTimerDl = macCellGrp.drxCfg.drxHarqRttTimerDl;
+ macCellGrpCfg->drxCfg.drxHarqRttTimerUl = macCellGrp.drxCfg.drxHarqRttTimerUl;
+ macCellGrpCfg->drxCfg.drxRetransmissionTimerDl = macCellGrp.drxCfg.drxRetransmissionTimerDl;
+ macCellGrpCfg->drxCfg.drxRetransmissionTimerUl = macCellGrp.drxCfg.drxRetransmissionTimerUl;
+ macCellGrpCfg->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetChoice = macCellGrp.drxCfg.drxLongCycleStartOffset.\
+ drxLongCycleStartOffsetChoice;
+ macCellGrpCfg->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetVal = macCellGrp.drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetVal;
+ macCellGrpCfg->drxCfg.shortDrxPres = macCellGrp.drxCfg.shortDrxPres;
+ if(macCellGrpCfg->drxCfg.shortDrxPres)
+ {
+ macCellGrpCfg->drxCfg.shortDrx.drxShortCycle = macCellGrp.drxCfg.shortDrx.drxShortCycle;
+ macCellGrpCfg->drxCfg.shortDrx.drxShortCycleTimer = macCellGrp.drxCfg.shortDrx.drxShortCycleTimer;
+ }
+ macCellGrpCfg->drxCfg.drxSlotOffset = macCellGrp.drxCfg.drxSlotOffset;
+#endif
return ROK;
}
DU_LOG("\nERROR --> MAC : Failed to copy LCs at fillSchUeCfg()");
return ret;
}
+
+#ifdef NR_DRX
+ schUeCfg->drxConfigIndicatorRelease = ueCfg->drxConfigIndicatorRelease;;
+#endif
+
return ret;
}
DU_LOG("\nERROR --> MAC: Failed while filing MAC LC List at fillMacUeCb()");
}
ueCb->transmissionAction = ueCfg->transmissionAction;
+
return ret;
}
void deleteMacRaCb(uint16_t cellIdx, MacUeCb *ueCb)
{
- uint8_t ueIdx;
+ uint8_t tbIdx;
+ MacRaCbInfo *raCb = ueCb->raCb;
+ DlHarqProcCb *hqProcCb;
- for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
+ if(raCb && (raCb->crnti == ueCb->crnti))
{
- if(macCb.macCell[cellIdx]->macRaCb[ueIdx].crnti == ueCb->crnti)
+ hqProcCb = &raCb->msg4HqInfo;
+ MAC_FREE(raCb->msg4Pdu, raCb->msg4PduLen);
+ for(tbIdx = 0; tbIdx < raCb->msg4HqInfo.numTb; tbIdx++)
{
- if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu)
- {
- MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu, \
- macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen);
- }
- if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu)
- {
- MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \
- macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize);
- }
- memset(&macCb.macCell[cellIdx]->macRaCb[ueIdx], 0, sizeof(MacRaCbInfo));
- break;
+ MAC_FREE(raCb->msg4HqInfo.tbInfo[tbIdx].tb, \
+ raCb->msg4HqInfo.tbInfo[tbIdx].tbSize - TX_PAYLOAD_HDR_LEN);
}
+ memset(raCb, 0, sizeof(MacRaCbInfo));
}
-
}
/*******************************************************************
* ****************************************************************/
uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
{
- uint8_t ret =ROK;
+ uint8_t ret = ROK;
+ uint8_t hqProcIdx = 0;
if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\
&&(ueCb->state == UE_STATE_ACTIVE))
}
else
{
+ /* Initialize all DL HARQ PROC ID to MAX NUM OF HARQ PROC */
+ for(hqProcIdx = 0; hqProcIdx < MAX_NUM_HARQ_PROC; hqProcIdx++)
+ {
+ ueCb->dlInfo.dlHarqEnt.harqProcCb[hqProcIdx].procId = MAX_NUM_HARQ_PROC;
+ }
+
/* If UE has not requested for RACH yet, it means UE context is created for a
* UE in handover */
if(macCb.macCell[cellIdx]->macRaCb[ueCb->ueId-1].crnti == ueCb->crnti)
}
else
{
- deleteMacRaCb(cellIdx, ueCb);
return ROK;
}
}
*
* @details
*
-* Function : MacProcSchUeCfgRsp
+* Function : MacProcSchUeDeleteRsp
*
* Functionality:
-* Processes UE create delete from scheduler
+* Processes UE delete from scheduler
*
* @params[in] Pst : Post structure
* schUeDelRsp : Scheduler UE delete respons
uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
{
- uint8_t ueId =0, isCrntiValid = 0;
+ uint8_t ueId =0, isCrntiValid = 0, tbIdx =0, idx=0;
uint16_t cellIdx=0;
uint8_t ret = RFAILED;
UeDeleteStatus result;
+ DlHarqEnt *dlHarqEnt;
#ifdef CALL_FLOW_DEBUG_LOG
DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_DELETE_RSP_TO_MAC\n");
MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.lcCb[lcIdx].snssai, sizeof(Snssai));
}
#endif
+ dlHarqEnt = &macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.dlHarqEnt;
+ for(idx =0 ; idx<MAX_NUM_HARQ_PROC; idx++)
+ {
+ tbIdx = 0;
+ while(dlHarqEnt->harqProcCb[idx].numTb)
+ {
+
+ MAC_FREE(dlHarqEnt->harqProcCb[idx].tbInfo[tbIdx].tb, dlHarqEnt->harqProcCb[idx].tbInfo[tbIdx].tbSize);
+ dlHarqEnt->harqProcCb[idx].numTb--;
+ tbIdx++;
+ }
+ }
memset(&macCb.macCell[cellIdx]->ueCb[ueId -1], 0, sizeof(MacUeCb));
macCb.macCell[cellIdx]->numActvUe--;
- result = SUCCESS;
+ result = DEL_SUCCESSFUL;
ret = ROK;
}
else
{
uint8_t ret = ROK;
uint8_t cellIdx=0;
- UeDeleteStatus result=SUCCESS;
+ UeDeleteStatus result=DEL_SUCCESSFUL;
MacUeCb *ueCb = NULLP;
MacCellCb *cellCb = NULLP;
result = CELLID_INVALID;
}
- if(result != SUCCESS)
+ if(result != DEL_SUCCESSFUL)
{
MacSendUeDeleteRsp(ueDelete->cellId, ueDelete->crnti, result);
MAC_FREE_SHRABL_BUF(pst->region, pst->pool, ueDelete, sizeof(MacUeDelete));