[Epic-ID: ODUHIGH-538][Issue-ID: ODUHIGH-563] Fixes to read SCTP and EGTP configurati...
[o-du/l2.git] / src / 5gnrsch / sch_ue_mgr.c
index 23d3638..fcc671e 100644 (file)
@@ -370,12 +370,17 @@ uint8_t fillSchUeCbFrmCfgReq(Inst inst, SchUeCb *ueCb, SchUeCfgReq *ueCfg)
             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;
-         }
       }
    }
 
@@ -793,7 +798,12 @@ uint8_t SchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg)
       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
@@ -1152,7 +1162,7 @@ uint8_t SchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg)
    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()");
@@ -1170,7 +1180,7 @@ uint8_t SchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg)
    /* 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() ");
@@ -1181,6 +1191,11 @@ uint8_t SchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg)
    {
       /* 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;
@@ -1292,7 +1307,7 @@ void deleteSchPdschServCellCfg(SchPdschServCellCfg *pdschServCellCfg)
 * ****************************************************************/
 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;
 
@@ -1300,12 +1315,12 @@ void deleteSchUeCb(SchUeCb *ueCb)
    {
       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));
@@ -1313,12 +1328,12 @@ void deleteSchUeCb(SchUeCb *ueCb)
 
       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));
@@ -1373,6 +1388,11 @@ void deleteSchUeCb(SchUeCb *ueCb)
          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));
    }
 }
@@ -1498,7 +1518,7 @@ void schUpdateHarqFdbk(SchUeCb *ueCb, uint8_t numHarq, uint8_t *harqPayload, Slo
 {
    SchDlHqProcCb *hqP;
    SchHqDlMap *hqDlMap;
-   CmLList  *node;
+   CmLList  *node = NULLP;
    uint8_t fdbkPos = 0;
 
    hqDlMap = ueCb->hqDlmap[slotInd->slot];
@@ -1507,29 +1527,37 @@ void schUpdateHarqFdbk(SchUeCb *ueCb, uint8_t numHarq, uint8_t *harqPayload, Slo
    {
       return;
    }
-   if (ueCb->cellCb->raCb[ueCb->ueId-1].raState != SCH_RA_STATE_MSG4_PENDING)
+
+   while(fdbkPos < numHarq)
    {
       node = hqDlMap->hqList.first;
-      while(node)
+      if(node == NULLP)
+      {
+         DU_LOG("\nERROR :  SCH --> DL HARQ list is empty thus no need to process the dl harq feedback!");
+         return;
+      }
+      if (ueCb->cellCb->raCb[ueCb->ueId-1].raState != SCH_RA_STATE_MSG4_PENDING)
+      {
+         while(node)
+         {
+            hqP = (SchDlHqProcCb*)node->node;
+            node = node->next;
+            cmLListDelFrm(&hqDlMap->hqList, &hqP->dlSlotLnk);
+            /* 
+               Decode harq feedback if needed post FAPI message decoding also or check how to decode this FAPI msg.
+               case 1 semi static harq Ack/Nack codebook //Supported
+               case 2 dynamic harq ACK/NACK codebook //Not supported
+               */
+            schDlHqFeedbackUpdate(hqP, harqPayload[fdbkPos++], HQ_TB_ACKED);//Marking 2nd TB as ACKED for now as only one TB to be used
+         }
+      }
+      else
       {
          hqP = (SchDlHqProcCb*)node->node;
-         node = node->next;
-         cmLListDelFrm(&hqDlMap->hqList, &hqP->ulSlotLnk);
-         /* 
-            Decode harq feedback if needed post FAPI message decoding also or check how to decode this FAPI msg.
-            case 1 semi static harq Ack/Nack codebook //Supported
-            case 2 dynamic harq ACK/NACK codebook //Not supported
-         */
-         schDlHqFeedbackUpdate(hqP, harqPayload[fdbkPos++], HQ_TB_ACKED);//Marking 2nd TB as ACKED for now as only one TB to be used
+         cmLListDelFrm(&hqDlMap->hqList, &hqP->dlSlotLnk);
+         schMsg4FeedbackUpdate(hqP, harqPayload[fdbkPos++]);
       }
    }
-   else
-   {
-      node = hqDlMap->hqList.first;
-      hqP = (SchDlHqProcCb*)node->node;
-      cmLListDelFrm(&hqDlMap->hqList, &hqP->ulSlotLnk);
-      schMsg4FeedbackUpdate(hqP, harqPayload[fdbkPos++]);
-   }
 }
 /**********************************************************************
   End of file