#include "du_app_mac_inf.h"
#include "mac_sch_interface.h"
#include "sch.h"
+#include "sch_tmr.h"
#include "sch_utils.h"
#ifdef NR_DRX
#include "sch_drx.h"
Pst rspPst;
cfgRsp->cellId = ueCfg->cellId;
- cfgRsp->ueId = ueCfg->ueId;
cfgRsp->crnti = ueCfg->crnti;
cfgRsp->rsp = result;
Pst rspPst;
reCfgRsp->cellId = ueRecfgReq->cellId;
- reCfgRsp->ueId = ueRecfgReq->ueId;
reCfgRsp->crnti = ueRecfgReq->crnti;
reCfgRsp->rsp = result;
uint8_t fillSchUeCbFrmCfgReq(Inst inst, SchUeCb *ueCb, SchUeCfgReq *ueCfg)
{
uint8_t lcIdx, ueLcIdx, idx;
- uint8_t freqDomainResource[FREQ_DOM_RSRC_SIZE] = {0};
SchPdschCfgCmn pdschCfg;
SchPucchDlDataToUlAck *dlDataToUlAck;
uint8_t retDL = ROK, retUL = ROK;
bool isLcIdValid = FALSE;
ueCb->ueCfg.cellId = ueCfg->cellId;
- ueCb->ueCfg.ueId = ueCfg->ueId;
+ ueCb->ueCfg.ueId = ueCb->ueId;
ueCb->ueCfg.crnti = ueCfg->crnti;
if(ueCfg->macCellGrpCfgPres == true)
{
schInitDrxHarqCb(&ueCb->ulHqEnt.procs[idx].ulDrxHarqCb);
}
/* convert all the drx configuration recived in ms/subms into number of slots and store into the drxUeCb */
- schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb);
+ schFillDrxUeCb(ueCb->cellCb->numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb);
/* Calculate the onduration timer and short cycle timer (if shortcycle configuration is present) as soon as we
* recived ueCfg request */
schAddUeInOndurationList(ueCb->cellCb, ueCb, 0);
{
/* convert all the drx configuration recived in ms/subms into number
* of slots and store into the drxUeCb */
- schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb);
+ schFillDrxUeCb(ueCb->cellCb->numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb);
/* Recalculate/Restart timer based on their presence */
schDrxUeReCfgTimer(ueCb->cellCb, ueCb);
}
fillSpCellInSchCb(&ueCb->ueCfg.spCellCfg, &ueCfg->spCellCfg);
- covertFreqDomRsrcMapToIAPIFormat(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc,\
- freqDomainResource);
- memset(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, 0, FREQ_DOM_RSRC_SIZE);
- memcpy(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, freqDomainResource, FREQ_DOM_RSRC_SIZE);
-
ueCb->ueCfg.spCellCfgPres = true;
dlDataToUlAck = ueCfg->spCellCfg.servCellCfg.initUlBwp.pucchCfg.dlDataToUlAck;
if(ueCb->cellCb)
BuildK0K1Table(ueCb->cellCb, &ueCb->k0K1InfoTbl, false, pdschCfg,\
ueCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, dlDataToUlAck->dlDataToUlAckListCount,\
dlDataToUlAck->dlDataToUlAckList);
+ }
+ else
+ {
+ BuildK0K1Table(ueCb->cellCb, &ueCb->k0K1InfoTbl, false, pdschCfg,\
+ ueCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, DEFAULT_UL_ACK_LIST_COUNT, defaultUlAckTbl);
+ }
ueCb->k0K1TblPrsnt = true;
BuildK2InfoTable(ueCb->cellCb, ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList,\
ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
NULLP, &ueCb->k2InfoTbl);
ueCb->k2TblPrsnt = true;
- }
}
}
uint8_t fillSchUeCbFrmRecfgReq(Inst inst, SchUeCb *ueCb, SchUeRecfgReq *ueRecfg)
{
uint8_t lcIdx, ueLcIdx, idx;
- uint8_t freqDomainResource[FREQ_DOM_RSRC_SIZE] = {0};
SchPdschCfgCmn pdschCfg;
SchPucchDlDataToUlAck *dlDataToUlAck;
uint8_t retDL = ROK, retUL = ROK;
ueCb->ueCfg.cellId = ueRecfg->cellId;
- ueCb->ueCfg.ueId = ueRecfg->ueId;
ueCb->ueCfg.crnti = ueRecfg->crnti;
+ GET_UE_ID(ueRecfg->crnti, ueCb->ueCfg.ueId);
ueCb->ueCfg.dataTransmissionAction = ueRecfg->dataTransmissionInfo;
if(ueRecfg->macCellGrpRecfgPres == true)
{
schInitDrxHarqCb(&ueCb->ulHqEnt.procs[idx].ulDrxHarqCb);
}
/* convert all the drx configuration recived in ms/subms into number of slots and store into the drxUeCb */
- schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueRecfg->macCellGrpRecfg.drxCfg, &ueCb->drxUeCb);
+ schFillDrxUeCb(ueCb->cellCb->numerology, ueRecfg->macCellGrpRecfg.drxCfg, &ueCb->drxUeCb);
/* Calculate the onduration timer and short cycle timer (if shortcycle configuration is present) as soon as we
* recived ueCfg request */
schAddUeInOndurationList(ueCb->cellCb, ueCb, 0);
{
/* convert all the drx configuration recived in ms/subms into number
* of slots and store into the drxUeCb */
- schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueRecfg->macCellGrpRecfg.drxCfg, &ueCb->drxUeCb);
+ schFillDrxUeCb(ueCb->cellCb->numerology, ueRecfg->macCellGrpRecfg.drxCfg, &ueCb->drxUeCb);
/* Recalculate/Restart timer based on their presence */
schDrxUeReCfgTimer(ueCb->cellCb, ueCb);
}
memcpy(&ueCb->ueCfg.spCellCfg , &ueRecfg->spCellRecfg, sizeof(SchSpCellRecfg));
- covertFreqDomRsrcMapToIAPIFormat(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc,\
- freqDomainResource);
- memset(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, 0, FREQ_DOM_RSRC_SIZE);
- memcpy(ueCb->ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0].freqDomainRsrc, freqDomainResource, FREQ_DOM_RSRC_SIZE);
-
ueCb->ueCfg.spCellCfgPres = true;
dlDataToUlAck = ueRecfg->spCellRecfg.servCellRecfg.initUlBwp.pucchCfg.dlDataToUlAck;
if(ueCb->cellCb)
uint8_t SchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg)
{
uint8_t lcIdx = 0, ret = ROK, idx = 0;
+ uint16_t ueId = 0;
SchCellCb *cellCb = NULLP;
SchUeCb *ueCb = NULLP;
SchUeCfgRsp cfgRsp;
return RFAILED;
}
/* Search if UE already configured */
- ueCb = &cellCb->ueCb[ueCfg->ueId - 1];
+ GET_UE_ID(ueCfg->crnti, ueId);
+ ueCb = &cellCb->ueCb[ueId - 1];
if((ueCb->crnti == ueCfg->crnti) && (ueCb->state == SCH_UE_STATE_ACTIVE))
{
/* Fill received Ue Configuration in UeCb */
memset(ueCb, 0, sizeof(SchUeCb));
- ueCb->ueId = ueCfg->ueId;
ueCb->crnti = ueCfg->crnti;
+ GET_UE_ID(ueCb->crnti, ueCb->ueId);
ueCb->cellCb = cellCb;
- schUlHqEntInit(cellCb, &cellCb->ueCb[ueCfg->ueId-1]);
- schDlHqEntInit(cellCb, &cellCb->ueCb[ueCfg->ueId-1]);
+ schUlHqEntInit(cellCb, &cellCb->ueCb[ueCb->ueId-1]);
+ schDlHqEntInit(cellCb, &cellCb->ueCb[ueCb->ueId-1]);
SCH_ALLOC(ueCb->hqDlmap, sizeof(SchHqDlMap*)*(ueCb->cellCb->numSlots));
SCH_ALLOC(ueCb->hqUlmap, sizeof(SchHqUlMap*)*(ueCb->cellCb->numSlots));
cmLListInit(&ueCb->hqUlmap[idx]->hqList);
}
ret = fillSchUeCbFrmCfgReq(inst, ueCb, ueCfg);
-
+
+ if(fillUeCoresetAndSsInfo(ueCb) == RFAILED)
+ {
+ DU_LOG("\nERROR --> SCH : Memory Allocation Failed");
+ return RFAILED;
+ }
if(ret == ROK)
{
/* If UE has initiated RACH and then UE context is created, it means UE is
SchUeRecfgRsp recfgRsp;
Inst inst = pst->dstInst - SCH_INST_START;
memset(&recfgRsp, 0, sizeof(SchUeRecfgRsp));
-
+
if(!ueRecfg)
{
DU_LOG("\nERROR --> SCH : Modifying Ue Config request failed at SchModUeConfigReq()");
/* Search if UE already configured */
GET_UE_ID(ueRecfg->crnti, ueId);
ueCb = &cellCb->ueCb[ueId -1];
-
+
if(!ueCb)
{
DU_LOG("\nERROR --> SCH : SchUeCb not found at SchModUeConfigReq() ");
{
/* Found the UeCb to Reconfig */
ret = fillSchUeCbFrmRecfgReq(inst, ueCb, ueRecfg);
+ if(fillUeCoresetAndSsInfo(ueCb) == RFAILED)
+ {
+ DU_LOG("\nERROR --> SCH : Memory Allocation Failed");
+ return RFAILED;
+ }
if(ret == ROK)
{
ueCb->cellCb = cellCb;
* ****************************************************************/
void deleteSchUeCb(SchUeCb *ueCb)
{
- uint8_t timeDomRsrcIdx = 0, ueLcIdx = 0, idx =0;
+ uint8_t timeDomRsrcIdx = 0, ueLcIdx = 0, slotIdx =0, cRSetIdx = 0;
SchPucchCfg *pucchCfg = NULLP;
SchPdschConfig *pdschCfg = NULLP;
{
if(ueCb->hqDlmap)
{
- for (idx = 0; idx<ueCb->cellCb->numSlots; idx++)
+ for (slotIdx = 0; slotIdx<ueCb->cellCb->numSlots; slotIdx++)
{
- if(ueCb->hqDlmap[idx])
+ if(ueCb->hqDlmap[slotIdx])
{
- cmLListDeleteLList(&ueCb->hqDlmap[idx]->hqList);
- SCH_FREE(ueCb->hqDlmap[idx], sizeof(SchHqDlMap));
+ cmLListDeleteLList(&ueCb->hqDlmap[slotIdx]->hqList);
+ SCH_FREE(ueCb->hqDlmap[slotIdx], sizeof(SchHqDlMap));
}
}
SCH_FREE(ueCb->hqDlmap, sizeof(SchHqDlMap*)*(ueCb->cellCb->numSlots));
if(ueCb->hqUlmap)
{
- for (idx = 0; idx<ueCb->cellCb->numSlots; idx++)
+ for (slotIdx = 0; slotIdx<ueCb->cellCb->numSlots; slotIdx++)
{
- if(ueCb->hqUlmap[idx])
+ if(ueCb->hqUlmap[slotIdx])
{
- cmLListDeleteLList(&ueCb->hqUlmap[idx]->hqList);
- SCH_FREE(ueCb->hqUlmap[idx], sizeof(SchHqUlMap));
+ cmLListDeleteLList(&ueCb->hqUlmap[slotIdx]->hqList);
+ SCH_FREE(ueCb->hqUlmap[slotIdx], sizeof(SchHqUlMap));
}
}
SCH_FREE(ueCb->hqUlmap, sizeof(SchHqUlMap*)*(ueCb->cellCb->numSlots));
ueCb->ueDrxInfoPres = false;
}
#endif
+
+ for(cRSetIdx=0; cRSetIdx < MAX_NUM_CRSET; cRSetIdx++)
+ {
+ SCH_FREE(ueCb->pdcchInfo[cRSetIdx].y, (sizeof(uint32_t) * ueCb->cellCb->numSlots));
+ }
memset(ueCb, 0, sizeof(SchUeCb));
}
}