PUSCH PDU for msg3 and UL-CCCH Ind flow completion 93/3993/6
authorBalaji Shankaran <balaji.shankaran@radisys.com>
Thu, 4 Jun 2020 11:51:54 +0000 (17:21 +0530)
committerBalaji Shankaran <balaji.shankaran@radisys.com>
Fri, 12 Jun 2020 13:15:48 +0000 (18:45 +0530)
Change-Id: Id53eea7a06dde18ab3de1ea05773b740e5b7e658
Signed-off-by: Balaji Shankaran <balaji.shankaran@radisys.com>
src/5gnrmac/lwr_mac_fsm.c
src/5gnrmac/mac.h
src/5gnrmac/mac_demux.c
src/5gnrmac/mac_msg_hdl.c
src/5gnrsch/sch_common.c
src/cm/mac_sch_interface.h
src/du_app/du_f1ap_msg_hdl.c
src/phy_stub/l1_bdy1.c

index 88e8a65..2e92246 100644 (file)
@@ -69,6 +69,7 @@
 #define PDSCH_PDU_TYPE 1
 #define SSB_PDU_TYPE 3
 #define PRACH_PDU_TYPE 0
+#define PUSCH_PDU_TYPE 1
 #define PDU_PRESENT 1
 #define SET_MSG_LEN(x, size) x += size
 
@@ -3397,9 +3398,15 @@ uint8_t getnPdus(fapi_ul_tti_req_t *ulTtiReq, MacUlSlot *currUlSlot)
          if(ulTtiReq)
             ulTtiReq->rachPresent = PDU_PRESENT;
       }
-      if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH_UCI)
-      {
-         pduCount++;
+               if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH)
+               {
+                  pduCount++;
+         if(ulTtiReq)
+            ulTtiReq->nUlsch++;
+               }
+               if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH_UCI)
+               {
+                  pduCount++;
          if(ulTtiReq)
             ulTtiReq->nUlsch = PDU_PRESENT;
       }
@@ -3487,6 +3494,67 @@ void fillPrachPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg, Ma
          sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_prach_pdu_t)));
    }
 }
+
+void fillPuschPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg, MacUlSlot *currUlSlot, uint32_t *msgLen)
+{
+   if(ulTtiReqPdu != NULLP)
+   {
+      ulTtiReqPdu->pduType = PUSCH_PDU_TYPE;
+      ulTtiReqPdu->u.pusch_pdu.pduBitMap = 1;
+      ulTtiReqPdu->u.pusch_pdu.rnti = currUlSlot->ulCellInfo.crnti;
+               /* TODO : Fill handle in raCb when scheduling pusch and access here */
+      ulTtiReqPdu->u.pusch_pdu.handle = 100;
+      ulTtiReqPdu->u.pusch_pdu.bwpSize = macCellCfg->initialUlBwp.bwp.numPrb;
+      ulTtiReqPdu->u.pusch_pdu.bwpStart = macCellCfg->initialUlBwp.bwp.firstPrb;
+      ulTtiReqPdu->u.pusch_pdu.subCarrierSpacing = \
+                  macCellCfg->initialUlBwp.bwp.scs;
+      ulTtiReqPdu->u.pusch_pdu.cyclicPrefix = \
+                  macCellCfg->initialUlBwp.bwp.cyclicPrefix;
+      ulTtiReqPdu->u.pusch_pdu.targetCodeRate = 308;
+      ulTtiReqPdu->u.pusch_pdu.qamModOrder = 2;
+      ulTtiReqPdu->u.pusch_pdu.mcsIndex = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tbInfo.mcs;
+      ulTtiReqPdu->u.pusch_pdu.mcsTable = 0;
+      ulTtiReqPdu->u.pusch_pdu.transformPrecoding = 1;
+      ulTtiReqPdu->u.pusch_pdu.dataScramblingId = currUlSlot->ulCellInfo.cellId;
+      ulTtiReqPdu->u.pusch_pdu.nrOfLayers = 1;
+      ulTtiReqPdu->u.pusch_pdu.ulDmrsSymbPos = 4;
+      ulTtiReqPdu->u.pusch_pdu.dmrsConfigType = 0;
+      ulTtiReqPdu->u.pusch_pdu.ulDmrsScramblingId = currUlSlot->ulCellInfo.cellId;
+      ulTtiReqPdu->u.pusch_pdu.scid = 0;
+      ulTtiReqPdu->u.pusch_pdu.numDmrsCdmGrpsNoData = 1;
+      ulTtiReqPdu->u.pusch_pdu.dmrsPorts = 0;
+      ulTtiReqPdu->u.pusch_pdu.resourceAlloc = \
+                  currUlSlot->ulCellInfo.schPuschInfo.resAllocType;
+      ulTtiReqPdu->u.pusch_pdu.rbStart = \
+                  currUlSlot->ulCellInfo.schPuschInfo.fdAlloc.startPrb;
+      ulTtiReqPdu->u.pusch_pdu.rbSize = \
+                  currUlSlot->ulCellInfo.schPuschInfo.fdAlloc.numPrb;
+      ulTtiReqPdu->u.pusch_pdu.vrbToPrbMapping = 0;
+      ulTtiReqPdu->u.pusch_pdu.frequencyHopping = 0;
+      ulTtiReqPdu->u.pusch_pdu.txDirectCurrentLocation = 0;
+      ulTtiReqPdu->u.pusch_pdu.uplinkFrequencyShift7p5khz = 0;
+      ulTtiReqPdu->u.pusch_pdu.startSymbIndex = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tdAlloc.startSymb;
+      ulTtiReqPdu->u.pusch_pdu.nrOfSymbols = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tdAlloc.numSymb;
+      ulTtiReqPdu->u.pusch_pdu.puschData.rvIndex = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tbInfo.rv;
+      ulTtiReqPdu->u.pusch_pdu.puschData.harqProcessId = \
+                  currUlSlot->ulCellInfo.schPuschInfo.harqProcId;
+      ulTtiReqPdu->u.pusch_pdu.puschData.newDataIndicator = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tbInfo.ndi;
+      ulTtiReqPdu->u.pusch_pdu.puschData.tbSize = \
+                  currUlSlot->ulCellInfo.schPuschInfo.tbInfo.tbSize;
+               /* numCb is 0 for new transmission */
+      ulTtiReqPdu->u.pusch_pdu.puschData.numCb = 0;
+
+      ulTtiReqPdu->pduSize = sizeof(fapi_ul_pusch_pdu_t);
+       
+      SET_MSG_LEN(*msgLen, (sizeof(ulTtiReqPdu->pduType) + \
+         sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_pusch_pdu_t)));
+   }
+}
 #endif
 
 /*******************************************************************
@@ -3534,6 +3602,7 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo)
 
          if(ulTtiReq != NULLP)
          {
+                          memset(ulTtiReq, 0, msgSize);
             ulTtiReq->sfn = currTimingInfo->sfn;
             ulTtiReq->slot = currTimingInfo->slot;
             ulTtiReq->nPdus = getnPdus(ulTtiReq, currUlSlot);
@@ -3543,17 +3612,28 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo)
                ulTtiReq->pdus = (fapi_ul_tti_req_pdu_t *)(ulTtiReq + \
                   (sizeof(fapi_ul_tti_req_t) - sizeof(fapi_ul_tti_req_pdu_t*)));
                /* Fill Prach Pdu */
-               if(ulTtiReq->rachPresent)
+               if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PRACH)
                {
                   pduIdx++;
                   fillPrachPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen);
+               }
+
+               /* Fill PUSCH PDU */
+               if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH)
+               {
+                   pduIdx++;
+                   fillPuschPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen);
+               }
 
+               if((currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PRACH) || \
+                                          (currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH))
+               {
                   msgLen += (sizeof(fapi_ul_tti_req_t) - sizeof(fapi_msg_t));
                   fillMsgHeader(&ulTtiReq->header, FAPI_UL_TTI_REQUEST, msgLen);
 
                   DU_LOG("\nLWR_MAC: Sending UL TTI Request");
                   LwrMacSendToPhy(ulTtiReq->header.message_type_id, msgSize, (void *)ulTtiReq);
-               }
+               }   
             } 
             else
             {
@@ -3563,11 +3643,13 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo)
                DU_LOG("\nLWR_MAC: Sending UL TTI Request");
                LwrMacSendToPhy(ulTtiReq->header.message_type_id, msgSize, (void *)ulTtiReq);
             }
+            memset(&currUlSlot, 0, sizeof(MacUlSlot));
             return ROK;
          }
          else
          {
             DU_LOG("\nLWR_MAC: Failed to allocate memory for UL TTI Request");
+                               memset(&currUlSlot, 0, sizeof(MacUlSlot));
             return RFAILED;
          }
       }
index 5729e34..0945064 100644 (file)
@@ -146,7 +146,7 @@ void createMacRaCb(uint16_t cellId, uint16_t crnti);
 void fillMsg4DlData(MacDlData *dlData);
 void fillMacCe(MacCeInfo  *macCeData);
 void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize);
-int unpackRxData(SlotIndInfo timingInfo, RxDataIndPdu *rxDataIndPdu);
+int unpackRxData(RxDataIndPdu *rxDataIndPdu);
 
 #endif
 /**********************************************************************
index 562afae..16725f1 100644 (file)
@@ -78,7 +78,7 @@
  *         RFAILED
  *
  * ****************************************************************/
-int unpackRxData(SlotIndInfo timingInfo, RxDataIndPdu *rxDataIndPdu)
+int unpackRxData(RxDataIndPdu *rxDataIndPdu)
 {
    uint8_t   lcId;
    uint8_t   idx = 0;
@@ -119,9 +119,8 @@ int unpackRxData(SlotIndInfo timingInfo, RxDataIndPdu *rxDataIndPdu)
             /* store msg3 pdu in macRaCb for CRI value */
             memcpy(&macCb.macCell->macRaCb[0].msg3Pdu, pdu, length);
 
-            /* TODO:
-             * Fill and send UL-CCCH Indication to DU APP 
-             */
+            /* Send UL-CCCH Indication to DU APP */
+                               macSendUlCcchInd(pdu, macCb.macCell->cellId, rxDataIndPdu->rnti); 
             break;
          }
          
index 01f7989..5f75dc7 100644 (file)
@@ -191,9 +191,13 @@ uint16_t fapiMacRxDataInd(Pst *pst, RxDataInd *rxDataInd)
    uint16_t pduIdx;
  
    DU_LOG("\nMAC : Received Rx Data indication");
+  
+   /* TODO : compare the handle received in RxDataInd with handle send in PUSCH
+        * PDU, which is stored in raCb */
+
    for(pduIdx = 0; pduIdx < rxDataInd->numPdus; pduIdx++)
    {
-      unpackRxData(rxDataInd->timingInfo, &rxDataInd->pdus[pduIdx]);
+      unpackRxData(&rxDataInd->pdus[pduIdx]);
    }
    return ROK;
 }
index 6c00b57..8a1ad71 100644 (file)
@@ -314,10 +314,12 @@ uint8_t schUlResAlloc(SchCellCb *cell, Inst schInst)
        
        if(ulAlloc->schPuschInfo)
        {
+          ulSchInfo.crnti = cell->raCb[0].tcrnti;
                ulSchInfo.dataType |= SCH_DATATYPE_PUSCH;
                memcpy(&ulSchInfo.schPuschInfo, ulAlloc->schPuschInfo,
                                sizeof(SchPuschInfo));
                SCH_FREE(ulAlloc->schPuschInfo, sizeof(SchPuschInfo));
+               ulAlloc->schPuschInfo = NULL;
        }
 
        //send msg to MAC
index 927ac16..6fc4caf 100644 (file)
@@ -452,6 +452,7 @@ typedef struct schPuschInfo
 typedef struct ulSchInfo
 {
    uint16_t      cellId;         /* Cell Id */
+       uint16_t      crnti;          /* CRNI */
        SlotIndInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
        uint8_t       dataType;       /* Type of info being scheduled */
        PrachSchInfo  prachSchInfo;   /* Prach scheduling info */
index 791a128..18f17b6 100644 (file)
@@ -2012,6 +2012,7 @@ uint8_t BuildTagConfig(struct TAG_Config *tagConfig)
        struct TAG_Config__tag_ToAddModList *tagList;
    uint8_t                     idx, elementCnt;
 
+   tagConfig->tag_ToReleaseList = NULLP;
    tagConfig->tag_ToAddModList = NULLP;
    DU_ALLOC(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
        if(!tagConfig->tag_ToAddModList)
@@ -2023,7 +2024,7 @@ uint8_t BuildTagConfig(struct TAG_Config *tagConfig)
        elementCnt = 1; //ODU_VALUE_ONE;
        tagList = tagConfig->tag_ToAddModList;
        tagList->list.count = elementCnt;
-       tagList->list.size  =  elementCnt * sizeof(struct TAG);
+       tagList->list.size  =  elementCnt * sizeof(struct TAG *);
 
    tagList->list.array = NULLP;
        DU_ALLOC(tagList->list.array, tagList->list.size);
@@ -2110,6 +2111,7 @@ uint8_t BuildBsrConfig(struct BSR_Config *bsrConfig)
 {
    bsrConfig->periodicBSR_Timer = PERIODIC_BSR_TMR;
        bsrConfig->retxBSR_Timer     = RETX_BSR_TMR;
+       bsrConfig->logicalChannelSR_DelayTimer = NULLP;
 
    return ROK;
 }
@@ -2147,7 +2149,7 @@ uint8_t BuildSchedulingReqConfig(struct SchedulingRequestConfig *schedulingReque
        elementCnt = 1; //ODU_VALUE_ONE;
        schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
        schReqList->list.count = elementCnt;
-       schReqList->list.size  =  elementCnt * sizeof(SchedulingRequestId_t);
+   schReqList->list.size  = elementCnt * sizeof(struct SchedulingRequestToAddMod *);
 
    schReqList->list.array = NULLP;
    DU_ALLOC(schReqList->list.array, schReqList->list.size);
@@ -2160,7 +2162,7 @@ uint8_t BuildSchedulingReqConfig(struct SchedulingRequestConfig *schedulingReque
    for(idx=0;idx<schReqList->list.count; idx++)
        {
           schReqList->list.array[idx] = NULLP;
-      DU_ALLOC(schReqList->list.array[idx], sizeof(SchedulingRequestId_t));
+               DU_ALLOC(schReqList->list.array[idx], sizeof(struct SchedulingRequestToAddMod));
                if(!schReqList->list.array[idx])
                {
                        DU_LOG("\nF1AP : Memory allocation failure in BuildSchedulingReqConfig");
@@ -2179,8 +2181,8 @@ uint8_t BuildSchedulingReqConfig(struct SchedulingRequestConfig *schedulingReque
                return RFAILED;
        }
    *(schReqList->list.array[idx]->sr_ProhibitTimer) = SR_PROHIBIT_TMR;
-
        schReqList->list.array[idx]->sr_TransMax = SR_TRANS_MAX;
+       schedulingRequestConfig->schedulingRequestToReleaseList = NULLP;
 
        return ROK;
 }
@@ -2229,7 +2231,7 @@ uint8_t BuildRlcConfig(struct RLC_Config *rlcConfig)
        rlcConfig->choice.am->ul_AM_RLC.maxRetxThreshold  = MAX_RETX_THRESHOLD;
 
    /* DL */
-       rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength = NULLP;
+   rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength = NULLP;
    DU_ALLOC(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
        if(!rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength)
        {
@@ -2239,7 +2241,7 @@ uint8_t BuildRlcConfig(struct RLC_Config *rlcConfig)
        *(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength) = SN_FIELD_LEN;
    rlcConfig->choice.am->dl_AM_RLC.t_Reassembly      = T_REASSEMBLY;
        rlcConfig->choice.am->dl_AM_RLC.t_StatusProhibit  = T_STATUS_PROHIBHIT;
-
+       
    return ROK;
 }
 
@@ -2273,6 +2275,10 @@ uint8_t BuildMacLCConfig(struct LogicalChannelConfig *macLcConfig)
    macLcConfig->ul_SpecificParameters->priority = MAC_LC_PRIORITY;
        macLcConfig->ul_SpecificParameters->prioritisedBitRate =        PRIORTISIED_BIT_RATE;
        macLcConfig->ul_SpecificParameters->bucketSizeDuration =        BUCKET_SIZE_DURATION;
+   macLcConfig->ul_SpecificParameters->allowedServingCells = NULLP;
+       macLcConfig->ul_SpecificParameters->allowedSCS_List = NULLP;
+       macLcConfig->ul_SpecificParameters->maxPUSCH_Duration = NULLP;
+   macLcConfig->ul_SpecificParameters->configuredGrantType1Allowed = NULLP;
 
    macLcConfig->ul_SpecificParameters->logicalChannelGroup = NULLP;
    DU_ALLOC(macLcConfig->ul_SpecificParameters->logicalChannelGroup,   sizeof(long));
@@ -2294,6 +2300,7 @@ uint8_t BuildMacLCConfig(struct LogicalChannelConfig *macLcConfig)
 
        macLcConfig->ul_SpecificParameters->logicalChannelSR_Mask = false;
        macLcConfig->ul_SpecificParameters->logicalChannelSR_DelayTimerApplied = false;
+       macLcConfig->ul_SpecificParameters->bitRateQueryProhibitTimer = NULLP;
 
    return ROK;
 }
@@ -2320,7 +2327,7 @@ uint8_t BuildRlcBearerToAddModList(struct CellGroupConfigRrc__rlc_BearerToAddMod
 
    elementCnt = 1;
    rlcBearerList->list.count = elementCnt;
-       rlcBearerList->list.size  = elementCnt * sizeof(struct RLC_BearerConfig);
+       rlcBearerList->list.size  = elementCnt * sizeof(struct RLC_BearerConfig *);
 
    rlcBearerList->list.array = NULLP;
        DU_ALLOC(rlcBearerList->list.array, rlcBearerList->list.size);
@@ -2354,6 +2361,7 @@ uint8_t BuildRlcBearerToAddModList(struct CellGroupConfigRrc__rlc_BearerToAddMod
        rlcBearerList->list.array[idx]->servedRadioBearer->present = RLC_BearerConfig__servedRadioBearer_PR_srb_Identity;
    rlcBearerList->list.array[idx]->servedRadioBearer->choice.srb_Identity = SRB_ID_1;
 
+   rlcBearerList->list.array[idx]->reestablishRLC = NULLP;
    rlcBearerList->list.array[idx]->rlc_Config = NULLP;
    DU_ALLOC(rlcBearerList->list.array[idx]->rlc_Config, sizeof(struct RLC_Config));
        if(!rlcBearerList->list.array[idx]->rlc_Config)
@@ -2486,7 +2494,7 @@ uint8_t BuildCsiMeasCfg(struct ServingCellConfig__csi_MeasConfig *csiMeasCfg)
  * ****************************************************************/
 uint8_t BuildSpCellCfgDed(ServingCellConfig_t *srvCellCfg)
 {
-
+#if 0
    srvCellCfg->initialDownlinkBWP = NULLP;
    DU_ALLOC(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
        if(!srvCellCfg->initialDownlinkBWP)
@@ -2500,7 +2508,7 @@ uint8_t BuildSpCellCfgDed(ServingCellConfig_t *srvCellCfg)
                DU_LOG("\nF1AP : BuildInitialDlBWP failed");
                return RFAILED;
        }
-
+#endif
    srvCellCfg->firstActiveDownlinkBWP_Id = NULLP;
        DU_ALLOC(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
        if(!srvCellCfg->firstActiveDownlinkBWP_Id)
@@ -2518,7 +2526,7 @@ uint8_t BuildSpCellCfgDed(ServingCellConfig_t *srvCellCfg)
                return RFAILED;
        }
        *(srvCellCfg->defaultDownlinkBWP_Id) = ACTIVE_DL_BWP_ID;
-
+#if 0
    srvCellCfg->uplinkConfig = NULLP;
    DU_ALLOC(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));
        if(!srvCellCfg->uplinkConfig)
@@ -2560,7 +2568,7 @@ uint8_t BuildSpCellCfgDed(ServingCellConfig_t *srvCellCfg)
                DU_LOG("\nF1AP : BuildCsiMeasCfg failed");
                return RFAILED;
        }
-
+#endif
        srvCellCfg->tag_Id = TAG_ID;
 
        return ROK;
@@ -2609,13 +2617,11 @@ uint8_t BuildSpCellCfg(SpCellConfig_t *spCellCfg)
                DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfg");
                return RFAILED;
        }
-
    if(BuildSpCellCfgDed(spCellCfg->spCellConfigDedicated) != ROK)
        {
                DU_LOG("\nF1AP : BuildSpCellCfgDed failed");
                return RFAILED;
        }
-
        return ROK;
 }
 /*******************************************************************
@@ -2636,6 +2642,9 @@ uint8_t BuildSpCellCfg(SpCellConfig_t *spCellCfg)
 * ****************************************************************/
 uint8_t BuildPhyCellGrpCfg(PhysicalCellGroupConfig_t *phyCellGrpCfg)
 {
+   phyCellGrpCfg->harq_ACK_SpatialBundlingPUCCH = NULLP;
+       phyCellGrpCfg->harq_ACK_SpatialBundlingPUSCH = NULLP;
+
    phyCellGrpCfg->p_NR_FR1 = NULLP;
        DU_ALLOC(phyCellGrpCfg->p_NR_FR1, sizeof(long));
        if(!phyCellGrpCfg->p_NR_FR1)
@@ -2645,6 +2654,13 @@ uint8_t BuildPhyCellGrpCfg(PhysicalCellGroupConfig_t *phyCellGrpCfg)
        }
    *(phyCellGrpCfg->p_NR_FR1)             = P_NR_FR1;
        phyCellGrpCfg->pdsch_HARQ_ACK_Codebook = PDSCH_HARQ_ACK_CODEBOOK;
+       phyCellGrpCfg->tpc_SRS_RNTI = NULLP;
+       phyCellGrpCfg->tpc_PUCCH_RNTI = NULLP;
+       phyCellGrpCfg->tpc_PUSCH_RNTI = NULLP;
+       phyCellGrpCfg->sp_CSI_RNTI = NULLP;
+       phyCellGrpCfg->cs_RNTI = NULLP;
+       phyCellGrpCfg->ext1 = NULLP;
+       phyCellGrpCfg->ext2 = NULLP;
 
        return ROK;
 }
@@ -2666,7 +2682,7 @@ uint8_t BuildPhyCellGrpCfg(PhysicalCellGroupConfig_t *phyCellGrpCfg)
 * ****************************************************************/
 uint8_t BuildMacCellGrpCfg(MAC_CellGroupConfig_t *macCellGrpCfg)
 {
-
+   macCellGrpCfg->drx_Config = NULLP;
    macCellGrpCfg->schedulingRequestConfig = NULLP;
        DU_ALLOC(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
        if(!macCellGrpCfg->schedulingRequestConfig)
@@ -2724,6 +2740,7 @@ uint8_t BuildMacCellGrpCfg(MAC_CellGroupConfig_t *macCellGrpCfg)
    }
 
    macCellGrpCfg->skipUplinkTxDynamic = false;
+       macCellGrpCfg->ext1 = NULLP;
 
        return ROK;
 }
@@ -2769,15 +2786,27 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
                        {
                                rlcConfig   = rlcBearerList->list.array[idx]->rlc_Config;
                                macLcConfig = rlcBearerList->list.array[idx]->mac_LogicalChannelConfig;
-                               DU_FREE(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t));
-                               DU_FREE(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
-                               DU_FREE(rlcConfig->choice.am, sizeof(struct RLC_Config__am));
-                               DU_FREE(rlcConfig, sizeof(struct RLC_Config));
+                               if(rlcConfig)
+                               {
+                                  if(rlcConfig->choice.am)
+                                       {
+                                     DU_FREE(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t));
+                                     DU_FREE(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
+                                     DU_FREE(rlcConfig->choice.am, sizeof(struct RLC_Config__am));
+                                       }
+                                  DU_FREE(rlcConfig, sizeof(struct RLC_Config));
+                               }
                                DU_FREE(rlcBearerList->list.array[idx]->servedRadioBearer, sizeof(struct RLC_BearerConfig__servedRadioBearer));
-                               DU_FREE(macLcConfig->ul_SpecificParameters->schedulingRequestID,        sizeof(SchedulingRequestId_t));
-                               DU_FREE(macLcConfig->ul_SpecificParameters->logicalChannelGroup,        sizeof(long));
-                               DU_FREE(macLcConfig->ul_SpecificParameters, sizeof(struct LogicalChannelConfig__ul_SpecificParameters));
-                               DU_FREE(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig, sizeof(struct LogicalChannelConfig));
+                               if(macLcConfig)
+                               {
+                                  if(macLcConfig->ul_SpecificParameters)
+                                       {
+                                     DU_FREE(macLcConfig->ul_SpecificParameters->schedulingRequestID,  sizeof(SchedulingRequestId_t));
+                                     DU_FREE(macLcConfig->ul_SpecificParameters->logicalChannelGroup,  sizeof(long));
+                                     DU_FREE(macLcConfig->ul_SpecificParameters, sizeof(struct LogicalChannelConfig__ul_SpecificParameters));
+                                  }
+                                  DU_FREE(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig, sizeof(struct LogicalChannelConfig));
+                               }
                                DU_FREE(rlcBearerList->list.array[idx], sizeof(struct RLC_BearerConfig));
                        }
                        DU_FREE(rlcBearerList->list.array, rlcBearerList->list.size);
@@ -2791,31 +2820,57 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
                schedulingRequestConfig = macCellGrpCfg->schedulingRequestConfig; 
                schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
 
-               for(idx=0;idx<schReqList->list.count; idx++)
+      if(schedulingRequestConfig)
+               {
+                  if(schReqList)
+                       {
+                          if(schReqList->list.array)
+                               {
+                        for(idx=0;idx<schReqList->list.count; idx++)
+                        {
+                                          if(schReqList->list.array[idx])
+                                               {
+                                   DU_FREE(schReqList->list.array[idx]->sr_ProhibitTimer, sizeof(long));
+                                   DU_FREE(schReqList->list.array[idx], sizeof(struct SchedulingRequestToAddMod));
+                           }
+                                       }
+                        DU_FREE(schReqList->list.array, schReqList->list.size);
+                               }
+                     DU_FREE(schedulingRequestConfig->schedulingRequestToAddModList,\
+                               sizeof(struct SchedulingRequestConfig__schedulingRequestToAddModList));    }
+                  DU_FREE(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
+      }
+      
+               if(macCellGrpCfg->bsr_Config)
                {
-                       DU_FREE(schReqList->list.array[idx]->sr_ProhibitTimer, sizeof(long));
-                       DU_FREE(schReqList->list.array[idx], sizeof(SchedulingRequestId_t));
+                  DU_FREE(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
                }
-               DU_FREE(schReqList->list.array, schReqList->list.size);
-               DU_FREE(schedulingRequestConfig->schedulingRequestToAddModList,\
-                               sizeof(struct SchedulingRequestConfig__schedulingRequestToAddModList));
-               DU_FREE(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
-
-               DU_FREE(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
 
                tagConfig = macCellGrpCfg->tag_Config;
                tagList = tagConfig->tag_ToAddModList;
-               for(idx=0; idx<tagList->list.count; idx++)
+               if(tagConfig)
                {
-                       DU_FREE(tagList->list.array[idx], sizeof(struct TAG));
-               }
-               DU_FREE(tagList->list.array, tagList->list.size);
-               DU_FREE(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
+                  if(tagList)
+                       {
+                          if(tagList->list.array)
+                               {
+                        for(idx=0; idx<tagList->list.count; idx++)
+                        {
+                  DU_FREE(tagList->list.array[idx], sizeof(struct TAG));
+                                       }
+                        DU_FREE(tagList->list.array, tagList->list.size);
+            }
+                     DU_FREE(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
+                       }
                DU_FREE(tagConfig, sizeof(struct TAG_Config));
+               }
 
                phrConfig = macCellGrpCfg->phr_Config;
-               DU_FREE(phrConfig->choice.setup, sizeof(struct PHR_Config));
-               DU_FREE(phrConfig, sizeof(struct MAC_CellGroupConfig__phr_Config));
+               if(phrConfig)
+               {
+                  DU_FREE(phrConfig->choice.setup, sizeof(struct PHR_Config));
+                  DU_FREE(phrConfig, sizeof(struct MAC_CellGroupConfig__phr_Config));
+      }
 
                DU_FREE(macCellGrpCfg, sizeof(MAC_CellGroupConfig_t));
        }
@@ -2825,35 +2880,27 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
        {
                DU_FREE(phyCellGrpCfg->p_NR_FR1, sizeof(long));
                DU_FREE(phyCellGrpCfg, sizeof(PhysicalCellGroupConfig_t));
-
        }
 
        spCellCfg = cellGrpCfg->spCellConfig;
        if(spCellCfg)
        {
                DU_FREE(spCellCfg->servCellIndex, sizeof(long));
-               DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
+      DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
 
                srvCellCfg = spCellCfg->spCellConfigDedicated;
-
-               DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
-
-               DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
-               DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
-
-
-               DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));
-
-
-               DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct      ServingCellConfig__pdsch_ServingCellConfig));
-
-
-               DU_FREE(srvCellCfg->csi_MeasConfig, sizeof(struct ServingCellConfig__csi_MeasConfig));
-
-               DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
+      if(srvCellCfg)
+               {
+                  DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
+                  DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
+                  DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
+                  DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));
+                  DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct   ServingCellConfig__pdsch_ServingCellConfig));
+                  DU_FREE(srvCellCfg->csi_MeasConfig, sizeof(struct ServingCellConfig__csi_MeasConfig));
+                  DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
+               }
                DU_FREE(spCellCfg, sizeof(SpCellConfig_t));
        }
-
        return ROK;
 }
 /*******************************************************************
@@ -2877,11 +2924,10 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer)
 {
        CellGroupConfigRrc_t  cellGrpCfg;
        asn_enc_rval_t        encRetVal;
-
+       uint8_t               ret = RFAILED;
 
        while(1)
        {
-               duToCuRrcContainer     = NULLP;
                cellGrpCfg.cellGroupId = CELL_GRP_ID;
 
                cellGrpCfg.rlc_BearerToAddModList = NULLP;
@@ -2897,7 +2943,7 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer)
                        break;
                }
 
-       cellGrpCfg.rlc_BearerToReleaseList = NULLP;
+      cellGrpCfg.rlc_BearerToReleaseList = NULLP;
                cellGrpCfg.mac_CellGroupConfig = NULLP;
                DU_ALLOC(cellGrpCfg.mac_CellGroupConfig, sizeof(MAC_CellGroupConfig_t));
                if(!cellGrpCfg.mac_CellGroupConfig)
@@ -2938,6 +2984,10 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer)
                        break;
                }
 
+      cellGrpCfg.sCellToAddModList = NULLP;
+               cellGrpCfg.sCellToReleaseList = NULLP;
+               cellGrpCfg.ext1 = NULLP;
+
                /* encode cellGrpCfg into duToCuRrcContainer */
                xer_fprint(stdout, &asn_DEF_CellGroupConfigRrc, &cellGrpCfg);
                cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
@@ -2959,11 +3009,19 @@ uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer)
                        }
                }
 
-               memcpy(duToCuRrcContainer, encBuf, encBufSize);
+          duToCuRrcContainer->size = encBufSize;
+               DU_ALLOC(duToCuRrcContainer->buf, duToCuRrcContainer->size);
+               if(!duToCuRrcContainer->buf)
+               {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildDuToCuRrcContainer");
+                       break;
+               }
+               memcpy(duToCuRrcContainer->buf, encBuf, duToCuRrcContainer->size);
+               ret = ROK;
                break;
        }
-       FreeMemDuToCuRrcCont(&cellGrpCfg);
-       return ROK;
+   FreeMemDuToCuRrcCont(&cellGrpCfg);
+       return ret;
 }
 
 /*******************************************************************
@@ -3018,7 +3076,7 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti
                         InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
                  initULRRCMsg =\
                         &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
-        elementCnt = 3;
+        elementCnt = 5;
                  initULRRCMsg->protocolIEs.list.count = elementCnt;
                  initULRRCMsg->protocolIEs.list.size = \
                         elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
@@ -3103,9 +3161,14 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti
                        initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\
                                 InitialULRRCMessageTransferIEs__value_PR_DUtoCURRCContainer;
 
-                       BuildDuToCuRrcContainer(&initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer);
+                       ret = BuildDuToCuRrcContainer(&initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer);
+         if(ret != ROK)
+                       {
+                          break;
+                       }
 
                        xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
+
                        /* Encode the F1SetupRequest type as APER */
                        cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
                        encBufSize = 0;
@@ -3114,7 +3177,8 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti
                        if(encRetVal.encoded == ENCODE_FAIL)
                        {
                            DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer\
-                                structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+                                   structure (at %s)\n",encRetVal.failed_type ? \
+                                        encRetVal.failed_type->name : "unknown");
                                 break;
                        }
                        else
@@ -3163,6 +3227,13 @@ uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti
                                                          DU_FREE(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf,
                                                                          initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size)
                                                  }
+
+                                                 idx1 = 4;
+                                                 if(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.buf)
+                                                 {
+                                                    DU_FREE(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.buf,
+                                                         initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.size);
+                                                 }
                                        for(ieId=0; ieId<elementCnt; ieId++)
                                        {
                                           DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],sizeof(InitialULRRCMessageTransferIEs_t));
index 9bb8362..086cd1e 100644 (file)
@@ -333,7 +333,7 @@ uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn)
    return ROK;
 } /* l1BuildAndSendCrcInd */
 
-
+#ifdef FAPI
 /*******************************************************************
  *
  * @brief Build and send Rx data indication
@@ -351,9 +351,8 @@ uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn)
  *         RFAILED - failure
  *
  * ****************************************************************/
-uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn)
+uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_t puschPdu)
 {
-#ifdef FAPI
    uint8_t idx = 0;
    fapi_rx_data_indication_t *rxDataInd;
    fapi_pdu_ind_info_t       *pduInfo;
@@ -373,10 +372,10 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn)
    rxDataInd->numPdus = 1;
 
    pduInfo = &rxDataInd->pdus[idx];
-   pduInfo->handle = 0;
-   pduInfo->rnti = 0;
-   pduInfo->harqId = 0;
-   pduInfo->pduLength = 24;
+   pduInfo->handle = puschPdu.handle;
+   pduInfo->rnti = puschPdu.rnti;
+   pduInfo->harqId = puschPdu.puschData.harqProcessId;
+   pduInfo->pduLength = puschPdu.puschData.tbSize;
    pduInfo->ul_cqi = 0;
    pduInfo->timingAdvance = 0;
    pduInfo->rssi = 0;
@@ -416,10 +415,9 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn)
    if(pduInfo->pduLength)
       MAC_FREE(pduInfo->pduData, pduInfo->pduLength);
    MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t));
-#endif
    return ROK;
 }
-
+#endif
 
 /*******************************************************************
  *
@@ -700,6 +698,12 @@ PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg)
        {
                if(ulTtiReq->pdus[numPdus-1].pduType == 0)
                        DU_LOG("\nPHY STUB: PRACH PDU");
+      if(ulTtiReq->pdus[numPdus-1].pduType == 1)
+      {
+         DU_LOG("\nPHY STUB: PUSCH PDU");                      
+         l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, \
+                          ulTtiReq->pdus[numPdus-1].u.pusch_pdu); 
+      }
                numPdus--;
        }