Merge "Fixes in current code for Multi-UE support [Issue-ID: ODUHIGH-354]"
authorHarshita Lal <harshita.lal@radisys.com>
Mon, 23 Aug 2021 08:45:56 +0000 (08:45 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Mon, 23 Aug 2021 08:45:56 +0000 (08:45 +0000)
30 files changed:
build/odu/makefile
src/5gnrmac/lwr_mac_ex_ms.c
src/5gnrmac/lwr_mac_fsm.c
src/5gnrmac/lwr_mac_handle_phy.c
src/5gnrmac/lwr_mac_phy.c
src/5gnrmac/mac_cfg_hdl.c
src/5gnrmac/mac_msg_router.c
src/5gnrmac/mac_rach.c
src/5gnrmac/mac_slot_ind.c
src/5gnrmac/mac_ue_mgr.c
src/5gnrrlc/rlc_dl_msg_router.c
src/5gnrrlc/rlc_ul_msg_router.c
src/5gnrsch/sch.c
src/5gnrsch/sch_msg_router.c
src/5gnrsch/sch_rach.c
src/5gnrsch/sch_slot_ind.c
src/5gnrsch/sch_ue_mgr.c
src/cm/du_app_mac_inf.h
src/cm/mac_sch_interface.h
src/cu_stub/cu_f1ap_msg_hdl.c
src/du_app/du_cfg.c
src/du_app/du_cfg.h
src/du_app/du_egtp.c
src/du_app/du_f1ap_msg_hdl.c
src/du_app/du_mgr_msg_router.c
src/du_app/du_sctp.c
src/du_app/du_sys_info_hdl.c
src/du_app/du_ue_mgr.c
src/phy_stub/phy_stub_ex_ms.c
test/unit_test.sh

index f478388..193760d 100644 (file)
@@ -74,7 +74,7 @@ endif
 # macro for output file name and makefile name
 #
 
-PLTFRM_FLAGS= -UMSPD -DODU -DINTEL_FAPI #-DODU_MEMORY_DEBUG_LOG #-DODU_SLOT_IND_DEBUG_LOG -DEGTP_TEST
+PLTFRM_FLAGS= -UMSPD -DODU -DINTEL_FAPI #-DCALL_FLOW_DEBUG_LOG #-DODU_MEMORY_DEBUG_LOG #-DODU_SLOT_IND_DEBUG_LOG -DEGTP_TEST
 
 ifeq ($(MODE),TDD)
    PLTFRM_FLAGS += -DNR_TDD
index 91fb52c..abf31e3 100644 (file)
@@ -55,6 +55,84 @@ uint8_t lwrMacActvInit(Ent entity, Inst inst, Region region, Reason reason)
    return ROK;\r
 }\r
 \r
+/**************************************************************************\r
+* @brief function prints src, dest, msg info about all the msgs received \r
+*\r
+* @details\r
+*\r
+*     Function : callFlowlwrMacActvTsk \r
+*\r
+*     Functionality:\r
+*          function prints src, dest, msg info about all the msgs received\r
+*\r
+* @param[in]  Pst *pst\r
+*\r
+* @return void \r
+***************************************************************************/\r
+\r
+void callFlowlwrMacActvTsk(Pst *pst)\r
+{\r
+   char sourceTask[50];\r
+   char destTask[50]="ENTLWRMAC";\r
+   char message[100];\r
+\r
+   switch(pst->srcEnt)\r
+   {\r
+      case ENTLWRMAC:\r
+         {\r
+            strcpy(sourceTask,"ENTLWRMAC");\r
+            switch(pst->event)\r
+            {\r
+#ifdef INTEL_WLS_MEM\r
+               case EVT_START_WLS_RCVR:\r
+                  {\r
+                     strcpy(message,"EVT_START_WLS_RCVR");\r
+                     break;\r
+                  }\r
+#endif\r
+               default:\r
+                  {\r
+                     strcpy(message,"Invalid Event");\r
+                     break;\r
+                  }\r
+            }\r
+            break;\r
+         }\r
+\r
+#ifndef INTEL_WLS_MEM\r
+      case ENTPHYSTUB:\r
+         {\r
+            strcpy(sourceTask,"PHY");\r
+            switch(pst->event)\r
+            {\r
+               case EVT_PHY_STUB_SLOT_IND:\r
+                  {\r
+                     strcpy(message,"EVT_PHY_STUB_SLOT_IND");\r
+                     break;\r
+                  }\r
+\r
+               case EVT_PHY_STUB_STOP_IND:\r
+                 {\r
+                    strcpy(message,"EVT_PHY_STUB_STOP_IND");\r
+                    break;\r
+                 }\r
+               default:\r
+                  {\r
+                     strcpy(message,"Invalid Event");\r
+                     break;\r
+                  }\r
+            }\r
+            break;\r
+         }\r
+#endif\r
+\r
+      default:\r
+         {\r
+            strcpy(sourceTask,"Invalid Source Entity Id");\r
+         }\r
+   }\r
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);\r
+}\r
 /**************************************************************************\r
  * @brief Task Activation callback function. \r
  *\r
@@ -79,6 +157,10 @@ uint8_t lwrMacActvTsk(Pst *pst, Buffer *mBuf)
 {\r
    uint8_t ret = ROK;\r
 \r
+#ifdef CALL_FLOW_DEBUG_LOG\r
+   callFlowlwrMacActvTsk(pst);\r
+#endif\r
+   \r
    switch(pst->srcEnt)\r
    {\r
       case ENTLWRMAC:\r
index ffef575..2627533 100644 (file)
@@ -98,6 +98,9 @@ void lwrMacLayerInit(Region region, Pool pool)
  * ****************************************************************/
 uint8_t lwr_mac_procInvalidEvt(void *msg)
 {
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : INVALID_EVENT\n");
+#endif
    DU_LOG("\nERROR  -->  LWR_MAC: Error Indication Event[%d] received in state [%d]", lwrMacCb.event, lwrMacCb.phyState);
    return ROK;
 }
@@ -1325,6 +1328,10 @@ void setMibPdu(uint8_t *mibPdu, uint32_t *val, uint16_t sfn)
 uint8_t lwr_mac_procParamReqEvt(void *msg)
 {
 #ifdef INTEL_FAPI
+#ifdef CALL_FLOW_DEBUG_LOG 
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : PARAM_REQ\n");
+#endif
+
    /* startGuardTimer(); */
    fapi_param_req_t         *paramReq = NULL;
    fapi_msg_header_t        *msgHeader;
@@ -1987,6 +1994,9 @@ uint8_t lwr_mac_procIqSamplesReqEvt(void *msg)
 uint8_t lwr_mac_procConfigReqEvt(void *msg)
 {
 #ifdef INTEL_FAPI
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : CONFIG_REQ\n");
+#endif
 #ifdef NR_TDD
    uint8_t slotIdx = 0; 
    uint8_t symbolIdx =0;
@@ -2279,6 +2289,9 @@ uint8_t lwr_mac_procConfigRspEvt(void *msg)
 uint8_t lwr_mac_procStartReqEvt(void *msg)
 {
 #ifdef INTEL_FAPI
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : START_REQ\n");
+#endif
    fapi_msg_header_t *msgHeader;
    fapi_start_req_t *startReq;
    fapi_vendor_msg_t *vendorMsg;
@@ -2361,6 +2374,10 @@ uint8_t lwr_mac_procStartReqEvt(void *msg)
 uint8_t lwr_mac_procStopReqEvt(SlotIndInfo slotInfo, p_fapi_api_queue_elem_t  prevElem)
 {
 #ifdef INTEL_FAPI
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : STOP_REQ\n");
+#endif
+
    fapi_stop_req_t   *stopReq;
    fapi_vendor_msg_t *vendorMsg;
    p_fapi_api_queue_elem_t  stopReqElem;
@@ -3326,6 +3343,10 @@ uint8_t fillDlMsgTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlMsg
  * ****************************************************************/
 uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo)
 {
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : DL_TTI_REQUEST\n");
+#endif
+
 #ifdef INTEL_FAPI
    uint8_t idx =0;
    uint8_t nPdu = 0;
@@ -3570,6 +3591,10 @@ uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo)
 uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_api_queue_elem_t prevElem)
 {
 #ifdef INTEL_FAPI
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : TX_DATA_REQ\n");
+#endif
+
    uint8_t nPdu = 0;
    uint16_t cellIdx;
    uint16_t pduIndex = 0;
@@ -3918,6 +3943,10 @@ void fillPucchPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg,\
  ******************************************************************/
 uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t prevElem)
 {
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : UL_TTI_REQUEST\n");
+#endif
+
 #ifdef INTEL_FAPI
    uint16_t   cellIdx =0;
    uint8_t    pduIdx = -1;
@@ -4013,6 +4042,9 @@ uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t prevEl
  ******************************************************************/
 void fillUlDciPdu(fapi_dl_dci_t *ulDciPtr, DciInfo *schDciInfo)
 {
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTLWRMAC : UL_DCI_REQUEST\n");
+#endif
    if(ulDciPtr != NULLP)
    {
       uint8_t numBytes =0;
index 7e9d54e..e58d203 100644 (file)
@@ -477,6 +477,63 @@ uint8_t procUciInd(fapi_uci_indication_t  *fapiUciInd)
 }
 #endif /* FAPI */
 
+/*******************************************************************
+ * @brief Function prints src, dest, msg infor about all the msgs that
+ received.
+ *
+ * @details
+ *
+ *     Function :callFlowFromPhyToLwrMac 
+ *
+ *     Function call Flow From Phy To LwrMac
+ *
+ *  @param[in]  Pst     *pst, Post structure of the primitive.
+ *
+ *  @return  void
+ * ****************************************************************/
+void callFlowFromPhyToLwrMac(uint16_t msgId)
+{
+   char message[100];
+   switch(msgId)
+   {
+#ifdef INTEL_TIMER_MODE
+      case FAPI_VENDOR_EXT_UL_IQ_SAMPLES:
+         strcpy(message,"FAPI_VENDOR_EXT_UL_IQ_SAMPLES");
+         break;
+#endif
+      case FAPI_PARAM_RESPONSE:
+         strcpy(message,"FAPI_PARAM_RESPONSE");
+         break;
+      case FAPI_CONFIG_RESPONSE:
+         strcpy(message,"FAPI_CONFIG_RESPONSE");
+         break;
+      case FAPI_SLOT_INDICATION:
+         strcpy(message,"FAPI_SLOT_INDICATION");
+         break;
+      case FAPI_ERROR_INDICATION:
+         strcpy(message,"FAPI_ERROR_INDICATION");
+         break;
+      case FAPI_RX_DATA_INDICATION:
+         strcpy(message,"FAPI_RX_DATA_INDICATION");
+         break;
+      case FAPI_CRC_INDICATION:
+         strcpy(message,"FAPI_CRC_INDICATION");
+         break;
+      case FAPI_UCI_INDICATION:
+         strcpy(message,"FAPI_UCI_INDICATION");
+         break;
+      case FAPI_SRS_INDICATION:
+         strcpy(message,"FAPI_SRS_INDICATION");
+         break;
+      case FAPI_RACH_INDICATION:
+         strcpy(message,"FAPI_RACH_INDICATION");
+         break;
+      case FAPI_STOP_INDICATION:
+         strcpy(message,"FAPI_STOP_INDICATION");
+         break;
+   }
+   DU_LOG("\nCall Flow: PHY -> ENTLWRMAC : %s\n",message);
+}
 /*******************************************************************
  *
  * @brief Processes message from PHY
@@ -499,6 +556,9 @@ void procPhyMessages(uint16_t msgType, uint32_t msgSize, void *msg)
    fapi_msg_t *header = NULLP;
    header = (fapi_msg_t *)msg;
 
+#ifdef CALL_FLOW_DEBUG_LOG 
+   callFlowFromPhyToLwrMac(header->msg_id);
+#endif
    switch(header->msg_id)
    {
 #ifdef INTEL_TIMER_MODE
index 4d22eda..ac87d0b 100644 (file)
@@ -272,8 +272,49 @@ uint8_t LwrMacSendToL1(void *msg)
    uint8_t ret = ROK;
 #ifdef INTEL_FAPI
    uint16_t msgLen =0;
+   char message[100];
    p_fapi_api_queue_elem_t currMsg = NULLP;
 
+#ifdef CALL_FLOW_DEBUG_LOG   
+   currMsg = (p_fapi_api_queue_elem_t)msg;
+   while(currMsg)
+   {
+      switch(currMsg->msg_type)
+      {
+         case FAPI_PARAM_REQUEST:
+            strcpy(message, "FAPI_PARAM_REQUEST");
+            break;
+         case FAPI_CONFIG_REQUEST:
+            strcpy(message, "FAPI_CONFIG_REQUEST");
+            break;
+         case FAPI_START_REQUEST:
+            strcpy(message, "FAPI_START_REQUEST");
+            break;
+         case FAPI_DL_TTI_REQUEST:
+            strcpy(message, "FAPI_DL_TTI_REQUEST");
+            break;
+         case FAPI_TX_DATA_REQUEST:
+            strcpy(message, "FAPI_TX_DATA_REQUEST");
+            break;
+         case FAPI_UL_TTI_REQUEST:
+            strcpy(message, "FAPI_UL_TTI_REQUEST");
+            break;
+         case FAPI_STOP_REQUEST:
+            strcpy(message, "FAPI_STOP_REQUEST");
+            break;
+         case FAPI_UL_DCI_REQUEST:
+            strcpy(message, "FAPI_UL_DCI_REQUEST");
+            break;
+         default:
+            strcpy(message, "INVALID_MSG");
+            break;
+      }
+      DU_LOG("\nCall Flow: ENTLWRMAC -> PHY : %s\n",message);
+      currMsg = currMsg->p_next;
+   }
+#endif
+
+
 #ifdef INTEL_WLS_MEM
    void * wlsHdlr = NULLP;
 
index 240b4fa..2524a00 100644 (file)
@@ -200,7 +200,7 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg)
 {
    SchCellCfg schCellCfg;
    Pst        cfgPst;
-   uint8_t    ret =0;
+   uint8_t    idx=0, ret=0;
 
    memset(&cfgPst, 0, sizeof(Pst));
    memset(&schCellCfg, 0, sizeof(SchCellCfg));
@@ -272,26 +272,37 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg)
       macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8;
    schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16 =
       macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16;
-   schCellCfg.schInitialDlBwp.pdschCommon.k0 = macCellCfg->initialDlBwp.pdschCommon.k0;
-   schCellCfg.schInitialDlBwp.pdschCommon.mappingType =
-      macCellCfg->initialDlBwp.pdschCommon.mappingType;
-   schCellCfg.schInitialDlBwp.pdschCommon.startSymbol =
-      macCellCfg->initialDlBwp.pdschCommon.startSymbol;
-   schCellCfg.schInitialDlBwp.pdschCommon.lengthSymbol =
-      macCellCfg->initialDlBwp.pdschCommon.lengthSymbol;
+   schCellCfg.schInitialDlBwp.pdschCommon.numTimeDomAlloc = macCellCfg->initialDlBwp.pdschCommon.numTimeDomAlloc;
+   for(idx = 0; idx<macCellCfg->initialDlBwp.pdschCommon.numTimeDomAlloc; idx++)
+   {
+      schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0 = 
+         macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0;
+      schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType =
+         macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType;
+      schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol =
+         macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol;
+      schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol =
+         macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol;
+   }
 
    /* fill initial UL BWP */
    schCellCfg.schInitialUlBwp.bwp.freqAlloc.startPrb = macCellCfg->initialUlBwp.bwp.firstPrb;
    schCellCfg.schInitialUlBwp.bwp.freqAlloc.numPrb = macCellCfg->initialUlBwp.bwp.numPrb;
    schCellCfg.schInitialUlBwp.bwp.scs = macCellCfg->initialUlBwp.bwp.scs;
    schCellCfg.schInitialUlBwp.bwp.cyclicPrefix = macCellCfg->initialUlBwp.bwp.cyclicPrefix;
-   schCellCfg.schInitialUlBwp.puschCommon.k2 = macCellCfg->initialUlBwp.puschCommon.k2;
-   schCellCfg.schInitialUlBwp.puschCommon.mappingType =
-      macCellCfg->initialUlBwp.puschCommon.mappingType;
-   schCellCfg.schInitialUlBwp.puschCommon.startSymbol =
-      macCellCfg->initialUlBwp.puschCommon.startSymbol;
-   schCellCfg.schInitialUlBwp.puschCommon.lengthSymbol =
-      macCellCfg->initialUlBwp.puschCommon.lengthSymbol;
+   schCellCfg.schInitialUlBwp.puschCommon.numTimeDomRsrcAlloc = \
+      macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc;
+   for(idx = 0; idx < macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; idx++)
+   {
+      schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].k2 = 
+         macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].k2;
+      schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].mappingType =
+         macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].mappingType;
+      schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].startSymbol =
+         macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].startSymbol;
+      schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].symbolLength =
+         macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].symbolLength;
+   }
 #ifdef NR_TDD
    memcpy(&schCellCfg.tddCfg, &macCellCfg->tddCfg, sizeof(TDDCfg));
 #endif
@@ -356,6 +367,10 @@ uint8_t MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm)
 {
    uint16_t *cellId = NULLP;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_SCH_CELL_CFG_CFM\n");
+#endif
+
    if(schCellCfgCfm->rsp == RSP_OK)
    {
       cellId = &schCellCfgCfm->cellId;
@@ -458,6 +473,10 @@ uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDelRsp)
    uint8_t  ret = ROK;
    uint16_t cellIdx=0;
    CellDeleteStatus status;
+   
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_CELL_DELETE_RSP_TO_MAC\n");
+#endif  
 
    if(schCellDelRsp)
    {
index edb6639..e08afdd 100755 (executable)
@@ -391,8 +391,221 @@ Buffer  *mBuf                       /* message buffer       */
    }
 }
 
+/**
+* @brief Function prints src, dest, msg infor about all the msgs that received.
+*
+* @details
+*
+*     Function : callFlowRgActvTsk 
+*
+*     Function prints src, dest, msg infor about all the msgs that received
+*
+*  @param[in]  Pst     *pst, Post structure of the primitive.
+*
+*  @return  void
+**/
+
+void callFlowRgActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="ENTMAC";
+   char message[100];
+
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+#ifdef LCRGMILRG
+               case EVTLRGCFGREQ:
+                  strcpy(message,"EVTLRGCFGREQ");
+                  break;
+               case EVTMACSCHGENCFGREQ:
+                  strcpy(message,"EVTMACSCHGENCFGREQ");
+                  break;
+               case EVTLRGCNTRLREQ:
+                  strcpy(message,"EVTLRGCNTRLREQ");
+                  break;
+               case EVTLRGSSTAREQ:
+                  strcpy(message,"EVTLRGSSTAREQ");
+                  break;
+               case EVTLRGSTSREQ:
+                  strcpy(message,"EVTLRGSTSREQ");
+                  break;
+#endif /* LCRGMILRG */
+               case EVENT_MAC_CELL_CONFIG_REQ:
+                  strcpy(message,"EVENT_MAC_CELL_CONFIG_REQ");
+                  break;
+               case EVENT_MAC_CELL_START:
+                  strcpy(message,"EVENT_MAC_CELL_START");
+                  break;
+               case EVENT_MAC_CELL_STOP:
+                  strcpy(message,"EVENT_MAC_CELL_STOP");
+                  break;
+               case EVENT_MAC_DL_CCCH_IND:
+                  strcpy(message,"EVENT_MAC_DL_CCCH_IND");
+                  break;
+               case EVENT_MAC_UE_CREATE_REQ:
+                  strcpy(message,"EVENT_MAC_UE_CREATE_REQ");
+                  break;
+               case EVENT_MAC_UE_RECONFIG_REQ:
+                  strcpy(message,"EVENT_MAC_UE_RECONFIG_REQ");
+                  break;
+               case EVENT_MAC_UE_DELETE_REQ:
+                  strcpy(message,"EVENT_MAC_UE_DELETE_REQ");
+                  break;
+               case EVENT_MAC_CELL_DELETE_REQ:
+                  strcpy(message,"EVENT_MAC_CELL_DELETE_REQ");
+                  break;
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+            break;
+         }
+      case ENTRLC:
+         { 
+            strcpy(sourceTask,"ENTRLC");
+            switch(pst->event)
+            {
+#ifdef LCRGUIRGU
+               case EVTRGUBNDREQ:
+                  strcpy(message,"EVTRGUBNDREQ");
+                  break;
+               case EVTRGUUBNDREQ:
+                  strcpy(message,"EVTRGUUBNDREQ");
+                  break;
+               case EVENT_DL_DATA_TO_MAC:
+                  strcpy(message,"EVENT_DL_DATA_TO_MAC");
+                  break;
+               case EVENT_BO_STATUS_TO_MAC:
+                  strcpy(message,"EVENT_BO_STATUS_TO_MAC");
+                  break;
+#endif
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+
+            break;
+         }
+      case ENTLWRMAC:
+         {
+            strcpy(sourceTask,"ENTLWRMAC");
+            switch(pst->event)
+            {
+               case EVENT_SLOT_IND_TO_MAC:
+                  strcpy(message,"EVENT_SLOT_IND_TO_MAC");
+                  break;
+               case EVENT_STOP_IND_TO_MAC:
+                  strcpy(message,"EVENT_STOP_IND_TO_MAC");
+                  break;
+               case EVENT_RACH_IND_TO_MAC:
+                  strcpy(message,"EVENT_RACH_IND_TO_MAC");
+                  break;
+               case EVENT_CRC_IND_TO_MAC:
+                  strcpy(message,"EVENT_CRC_IND_TO_MAC");
+                  break;
+               case EVENT_RX_DATA_IND_TO_MAC:
+                  strcpy(message,"EVENT_RX_DATA_IND_TO_MAC");
+                  break;
+               case EVENT_UCI_IND_TO_MAC:
+                  strcpy(message,"EVENT_UCI_IND_TO_MAC");
+                  break;
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+
+            break;
+         }
+      case ENTMAC: /* When scheduler instance sends msg to MAC */
+         {
+            strcpy(sourceTask,"ENTMAC");
+            switch(pst->event)
+            {
+#ifdef LCRG
+               case EVTINFCELLREGREQ:
+                  strcpy(message,"EVTINFCELLREGREQ");
+                  break;
+               case EVTINFSFALLOCREQ:
+                  strcpy(message,"EVTINFSFALLOCREQ");
+                  break;
+               case EVTINFRLSHQREQ:
+                  strcpy(message,"EVTINFRLSHQREQ");
+                  break;
+               case EVTINFHQENTRESET:
+                  strcpy(message,"EVTINFHQENTRESET");
+                  break;
+               case EVTINFRLSRNTIREQ:
+                  strcpy(message,"EVTINFRLSRNTIREQ");
+                  break;
+#ifdef LTEMAC_SPS
+               case EVTINFSPSLCREG:
+                  strcpy(message,"EVTINFSPSLCREG");
+                  break;
+               case EVTINFSPSLCDEREG:
+                  strcpy(message,"EVTINFSPSLCDEREG");
+                  break;
+               case EVTINFSPSRESET:
+                  strcpy(message,"EVTINFSPSRESET");
+                  break;
+#endif /* LTEMAC_SPS */
+               case EVTINFLCGREG:
+                  strcpy(message,"EVTINFLCGREG");
+                  break;
+#endif            
+#if defined(LTE_ADV) && defined(LCPRG)
+               case EVTPRGUESCELLCFGREQ:
+                  strcpy(message,"EVTPRGUESCELLCFGREQ");
+                  break;
+               case EVTPRGUESCELLCFGCFM:
+                  strcpy(message,"EVTPRGUESCELLCFGCFM");
+                  break;
+               case EVTPRGUESCELLLCHMODCFM:
+                  strcpy(message,"EVTPRGUESCELLLCHMODCFM");
+                  break;
+               case EVTPRGUESCELLLCHDELCFMDEL:
+                  strcpy(message,"EVTPRGUESCELLLCHDELCFMDEL");
+                  break;
+               case EVTPRGUESCELLLCHADDCFM:
+                  strcpy(message,"EVTPRGUESCELLLCHADDCFM");
+                  break;
+               case EVTPRGUESCELLDELREQ:
+                  strcpy(message,"EVTPRGUESCELLDELREQ");
+                  break;
+               case EVTPRGUESCELLLCHMODREQ:
+                  strcpy(message,"EVTPRGUESCELLLCHMODREQ");
+                  break;
+               case EVTPRGUESCELLLCHDELREQ:
+                  strcpy(message,"EVTPRGUESCELLLCHDELREQ");
+                  break;
+               case EVTPRGUESCELLLCHADDREQ:
+                  strcpy(message,"EVTPRGUESCELLLCHADDREQ");
+                  break;
+
+#endif
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+            break;
+         }
+
+      default:
+         {
+            strcpy(sourceTask,"Invalid Source Entity Id");
+            break;
+         }
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 
 \f
+/**********************************************************************
+\f
 /**
  * @brief Task Activation callback function. 
  *
@@ -417,6 +630,11 @@ Pst     *pst,                       /* post structure       */
 Buffer  *mBuf                       /* message buffer       */
 )
 {
+
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowRgActvTsk(pst);
+#endif
+
    switch(pst->srcEnt)
    {
       /* The originator of this message is the stack manager,
index 9680559..306913c 100644 (file)
@@ -127,6 +127,10 @@ uint8_t MacProcUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo)
 {
    uint16_t  cellIdx;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UL_SCH_INFO\n");
+#endif
+
    GET_CELL_IDX(ulSchedInfo->cellId, cellIdx);
    if(ulSchedInfo != NULLP)
    {
index ab7c36c..d8dc0e7 100644 (file)
@@ -58,6 +58,9 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
    uint16_t  cellIdx;
    MacDlSlot *currDlSlot = NULLP;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_DL_SCH_INFO\n");
+#endif
    if(dlSchedInfo != NULLP)
    {
       GET_CELL_IDX(dlSchedInfo->cellId, cellIdx);
index 8c3bb2c..cb28673 100644 (file)
@@ -1221,6 +1221,16 @@ uint8_t fillInitDlBwpPdschCfg(PdschConfig macPdschCfg, SchPdschConfig *schPdschC
 
    for(idx = 0; idx < schPdschCfg->numTimeDomRsrcAlloc; idx++)
    {
+      if(macPdschCfg.timeDomRsrcAllociList[idx].k0)
+      {
+         MAC_ALLOC(schPdschCfg->timeDomRsrcAllociList[idx].k0, sizeof(uint8_t));
+         if(!schPdschCfg->timeDomRsrcAllociList[idx].k0)
+         {
+            DU_LOG("\nERROR  -->  MAC : Memory allocation failed for K0 in fillInitDlBwpPdschCfg()");
+            return RFAILED;
+         }
+         *(schPdschCfg->timeDomRsrcAllociList[idx].k0) = *(macPdschCfg.timeDomRsrcAllociList[idx].k0);
+      }
       schPdschCfg->timeDomRsrcAllociList[idx].mappingType = \
          macPdschCfg.timeDomRsrcAllociList[idx].mappingType;
       schPdschCfg->timeDomRsrcAllociList[idx].startSymbol = \
@@ -2288,6 +2298,21 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
    uint16_t cellIdx;
    MacUeCfg *ueCfg = NULLP;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   switch(pst->event)
+   {
+      case EVENT_UE_CONFIG_RSP_TO_MAC:
+         DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_CONFIG_RSP_TO_MAC\n");
+         break;
+      case EVENT_UE_RECONFIG_RSP_TO_MAC:
+         DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_RECONFIG_RSP_TO_MAC\n");
+         break;
+      default:
+         DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : Invalid Event\n");
+         break;
+   }
+#endif
+   
    GET_CELL_IDX(schCfgRsp->cellId, cellIdx);
    ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueIdx);
    if(ueCfg == NULLP)
@@ -2299,55 +2324,54 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
    switch(pst->event)
    {
       case EVENT_UE_CONFIG_RSP_TO_MAC:
-      {
-         if(schCfgRsp->rsp != RSP_NOK)
-        {
-            DU_LOG("\nINFO  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
-           if(ret == ROK)
-           {
-              ret = procMacUeCfgData(pst, ueCfg);
-              if(ret == ROK)
-              {
-                  result = MAC_DU_APP_RSP_OK;
+         {
+            if(schCfgRsp->rsp != RSP_NOK)
+            {
+               DU_LOG("\nINFO  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+               if(ret == ROK)
+               {
+                  ret = procMacUeCfgData(pst, ueCfg);
+                  if(ret == ROK)
+                  {
+                     result = MAC_DU_APP_RSP_OK;
+                  }
                }
-           }
-        }
-        else
-        {
-            DU_LOG("\nERROR  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
-        }
-         ret = MacSendUeCreateRsp(result, schCfgRsp);
-      }
-      break;
+            }
+            else
+            {
+               DU_LOG("\nERROR  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+            }
+            ret = MacSendUeCreateRsp(result, schCfgRsp);
+         }
+         break;
 
       case EVENT_UE_RECONFIG_RSP_TO_MAC:
-      {
-         if(schCfgRsp->rsp != RSP_NOK)
-        {
-            DU_LOG("\nINFO  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
-           if(ret == ROK)
-           {
-              ret = procMacUeCfgData(pst, ueCfg);
-              if(ret == ROK)
-              {
-                  result = MAC_DU_APP_RSP_OK;
+         {
+
+            if(schCfgRsp->rsp != RSP_NOK)
+            {
+               DU_LOG("\nINFO  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()",\
+                     schCfgRsp->crnti);
+               if(ret == ROK)
+               {
+                  ret = procMacUeCfgData(pst, ueCfg);
+                  if(ret == ROK)
+                  {
+                     result = MAC_DU_APP_RSP_OK;
+                  }
                }
-           }
-        }
-        else
-        {
-            DU_LOG("\nERROR  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
-        }
-         ret = MacSendUeReconfigRsp(result, schCfgRsp);
-      }
-      break;
-      
-      default:
-      break;
+            }
+            else
+            {
+               DU_LOG("\nERROR  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()",\
+               schCfgRsp->crnti);
+            }
+            ret = MacSendUeReconfigRsp(result, schCfgRsp);
+         }
+         break;
    }
    MAC_FREE(ueCfg, sizeof(MacUeCfg));
    ueCfg = NULLP;
-   
    return ret; 
 }
 
@@ -2524,6 +2548,10 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
    uint16_t cellIdx=0;
    uint8_t ret = RFAILED;
    UeDeleteStatus result;
+  
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_DELETE_RSP_TO_MAC\n");
+#endif   
    
    if(schUeDelRsp)
    {
index 258e2e6..f68e037 100755 (executable)
@@ -188,6 +188,186 @@ Reason reason               /* reason */
    return ROK;
 } /* kwActvInit */
 
+/*
+*
+* @brief
+*
+* Function:
+*   name : callFlowRlcDlActvTsk
+*
+*  @b Description:
+*  Function used to print values of src, dest, message 
+*  received at the layer
+*
+*  @param[in] pst   - Pst Structure
+*
+*  @return void  
+*/
+void callFlowRlcDlActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="ENTMAC";
+   char message[100];
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+#ifdef LCLKW
+               case LKW_EVT_CFG_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_CFG_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_CNTRL_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_CNTRL_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_STS_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_STS_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_STA_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_STA_REQ");
+                     break;
+                  }
+                  /* kw005.201 added support for L2 Measurement */
+#endif  /* LCLKW */
+
+#ifdef LCKWU
+               case KWU_EVT_DAT_REQ:              /* Data request */
+                  {
+                     strcpy(message,"KWU_EVT_DAT_REQ");
+                     break;
+                  }
+#endif /* LCKWU */
+
+               case EVENT_DL_RRC_MSG_TRANS_TO_RLC:
+                  {
+                     strcpy(message,"EVENT_DL_RRC_MSG_TRANS_TO_RLC");
+                     break;
+                  }
+               case EVENT_DL_USER_DATA_TRANS_TO_RLC:
+                  {
+                     strcpy(message,"EVENT_DL_USER_DATA_TRANS_TO_RLC");
+                     break;
+                  }
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+            break;
+         }
+
+      case ENTRLC:
+         {
+
+            strcpy(sourceTask,"ENTRLC");
+            switch(pst->event)
+            {
+#ifdef LCUDX
+               case UDX_EVT_BND_REQ:              /* Bind request */
+                  {
+                     strcpy(message,"UDX_EVT_BND_REQ");
+                     break;
+                  }
+
+               case UDX_EVT_UBND_REQ:              /* Bind request */
+                  {
+                     strcpy(message,"UDX_EVT_UBND_REQ");
+                     break;
+                  }
+               case UDX_EVT_CFG_REQ:             /* Unbind request */
+                  {
+                     strcpy(message,"UDX_EVT_CFG_REQ");
+                     break;
+                  }
+
+               case UDX_EVT_UEIDCHG_REQ:              /* Configuration request */
+                  {
+                     strcpy(message,"UDX_EVT_UEIDCHG_REQ");
+                     break;
+                  }
+
+               case UDX_EVT_STA_UPD_REQ:              /* Configuration request */
+                  {
+                     strcpy(message,"UDX_EVT_STA_UPD_REQ");
+                     break;
+                  }
+
+               case UDX_EVT_STA_PDU_REQ:              /* Configuration request */
+                  {
+                     strcpy(message,"UDX_EVT_STA_PDU_REQ");
+                     break;
+                  }
+
+#endif  /* LCCKW */
+               case UDX_EVT_DL_CLEANUP_MEM:
+                  {
+                  strcpy(message,"UDX_EVT_DL_CLEANUP_MEM");
+                     break;
+                  }
+               
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+
+            }
+            break;
+         }
+
+      case ENTMAC:
+         {
+            strcpy(sourceTask,"ENTMAC");
+            switch(pst->event)
+            {
+#ifdef LCRGU
+               case EVTRGUBNDCFM:     /* Bind request */
+                  {
+                     strcpy(message,"EVTRGUBNDCFM");
+                     break;
+                  }
+               case EVENT_SCHED_RESULT_TO_RLC: 
+                  {
+                     strcpy(message,"EVENT_SCHED_RESULT_TO_RLC");
+                     break;
+                  }
+                  /* kw005.201 added support for L2 Measurement */
+               case EVTRGUFLOWCNTRLIND:
+                  {
+                     strcpy(message,"EVTRGUFLOWCNTRLIND");
+                     break;
+                  }   
+#endif  /* LCRGU */
+#ifdef RLC_STA_PROC_IN_MAC/* RLC Status PDU Processing */
+               case UDX_EVT_STA_UPD_REQ:              /* Configuration request */
+                  {
+                     strcpy(message,"UDX_EVT_STA_UPD_REQ");
+                     break;
+                  }
+#endif
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+
+            }
+            break;
+         }
+      default:
+         {
+            strcpy(sourceTask,"Invalid Source Entity Id");
+         }
+    }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 \f
 /**
  *
@@ -221,6 +401,10 @@ Buffer *mBuf            /* message buffer */
    gRlcTId = pthread_self();
 #endif
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowRlcDlActvTsk(pst);
+#endif
+
    switch(pst->srcEnt)
    {
       case ENTDUAPP:
index e7da942..24b55b7 100755 (executable)
@@ -167,6 +167,162 @@ Reason reason               /* reason */
    return ROK;
 } /* rlcUlActvInit */
 
+/*
+* @brief
+*
+* Function:
+*   name : callFlowRlcUlActvTsk 
+*
+*  @b Description:
+*  Function used to print values of src, dest, message
+*  received at the layer
+*
+*  @param[in] pst   - Pst Structure
+*
+*  @return void
+*/
+
+void callFlowRlcUlActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="ENTRLCUL";
+   char message[100];
+   
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+#ifdef LCLKW
+               case LKW_EVT_CFG_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_CFG_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_CNTRL_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_CNTRL_REQ");
+                     break;
+                  }
+               
+               case EVENT_RLC_UE_CREATE_REQ:        /* UE Create Request */
+                  {
+                     strcpy(message,"EVENT_RLC_UE_CREATE_REQ");
+                     break;
+                  }
+              case EVENT_RLC_UE_RECONFIG_REQ:      /* UE Reconfig Request */
+                  {
+                     strcpy(message,"EVENT_RLC_UE_RECONFIG_REQ");
+                     break;
+                  }
+               case EVENT_RLC_UE_DELETE_REQ:
+                  {
+                     strcpy(message,"EVENT_RLC_UE_DELETE_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_STS_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_STS_REQ");
+                     break;
+                  }
+
+               case LKW_EVT_STA_REQ:
+                  {
+                     strcpy(message,"LKW_EVT_STA_REQ");
+                     break;
+                  }
+                  /* kw005.201 added support for L2 Measurement */
+#endif  /* LCLKW */
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                  break;
+                 }
+            }
+            break;
+         }
+
+      case ENTRLC:
+         {
+            strcpy(sourceTask,"ENTRLC");
+            switch(pst->event)
+            {
+#ifdef LCUDX
+               case UDX_EVT_BND_CFM:              /* Bind request */
+                  {
+                     strcpy(message,"UDX_EVT_BND_CFM");
+                     break;
+                  }
+
+               case UDX_EVT_CFG_CFM:             /* Unbind request */
+                  {
+                     strcpy(message,"UDX_EVT_CFG_CFM");
+                     break;
+                  }
+
+               case UDX_EVT_UEIDCHG_CFM:              /* Configuration request */
+                  {
+                     strcpy(message,"UDX_EVT_UEIDCHG_CFM");
+                     break;
+                  }
+               
+               case UDX_EVT_STA_PHBT_TMR_START:              /* Status Prohibit Timer Start */
+                  {
+                     strcpy(message,"UDX_EVT_STA_PHBT_TMR_START");
+                     break;
+                  }               
+
+#endif  /* LCCKW */
+
+               default:
+                     strcpy(message,"Invalid Event");
+                  break;
+
+            }
+            break;
+         }
+
+      case ENTMAC:
+         {
+            strcpy(sourceTask,"ENTMAC");
+            switch(pst->event)
+            {
+#ifdef LCRGU
+               case EVTRGUBNDCFM:     /* Bind request */
+                  {
+                     strcpy(message,"EVTRGUBNDCFM");
+                     break;
+                  }
+
+               case EVENT_UL_DATA_TO_RLC:    /* UL Data request */
+                  {
+                     strcpy(message,"EVENT_UL_DATA_TO_RLC");
+                     break;
+                  }
+
+#endif  /* LCRGU */
+
+               default:
+                     strcpy(message,"Invalid Event");
+                  break;
+            }
+            break;
+         }
+      default:
+         {
+            strcpy(sourceTask,"Invalid Source Entity Id");
+         }
+    }
+    DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+
+} 
+
+
+\f  
 \f
 /**
  *
@@ -193,6 +349,9 @@ Buffer *mBuf            /* message buffer */
 {
    S16 ret = ROK;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowRlcUlActvTsk(pst);
+#endif
 
    switch(pst->srcEnt)
    {
index 257c585..63a0ec8 100644 (file)
@@ -198,6 +198,10 @@ uint8_t SchProcGenCfgReq(Pst *pst, RgMngmt *cfg)
    RgMngmt   cfm;
    Pst       cfmPst;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : GENERAL_CFG_REQ\n");
+#endif
+
    if(pst->dstInst < SCH_INST_START)
    {
       DU_LOG("\nERROR  -->  SCH : Invalid inst ID");
@@ -264,6 +268,10 @@ uint8_t MacSchSlotInd(Pst *pst, SlotIndInfo *slotInd)
 {
    Inst  inst = pst->dstInst-SCH_INST_START;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_SLOT_IND_TO_SCH\n");
+#endif
+
    schProcessSlotInd(slotInd, inst);
 
    return ROK;
@@ -288,6 +296,11 @@ uint8_t MacSchSlotInd(Pst *pst, SlotIndInfo *slotInd)
 uint8_t MacSchRachInd(Pst *pst, RachIndInfo *rachInd)
 {
    Inst  inst = pst->dstInst-SCH_INST_START;
+
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_RACH_IND_TO_SCH\n");
+#endif
+
    DU_LOG("\nINFO  -->  SCH : Received Rach indication");
    schProcessRachInd(rachInd, inst);
    return ROK;
@@ -312,6 +325,10 @@ uint8_t MacSchRachInd(Pst *pst, RachIndInfo *rachInd)
  * ****************************************************************/
 uint8_t MacSchCrcInd(Pst *pst, CrcIndInfo *crcInd)
 {
+#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:
@@ -841,6 +858,10 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg)
    Pst rspPst;
    Inst inst = pst->dstInst-1; 
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_SCH_CELL_CFG\n");
+#endif 
+
    schInitCellCb(inst, schCellCfg);
    cellCb = schCb[inst].cells[inst]; //cells is of MAX_CELLS, why inst
    cellCb->macInst = pst->srcInst;
@@ -864,7 +885,6 @@ uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg)
    schCellCfgCfm.rsp = RSP_OK;
 
    ret = (*SchCellCfgCfmOpts[rspPst.selector])(&rspPst, &schCellCfgCfm);
-
    return ret;
 
 }
@@ -896,8 +916,12 @@ uint8_t MacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo)
    SchUeCb *ueCb = NULLP;
    SchCellCb *cell = NULLP;
    SchDlSlotInfo *schDlSlotInfo = 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
+
    DU_LOG("\nDEBUG  -->  SCH : Received RLC BO Status indication");
    cell = schCb[inst].cells[inst];
 
@@ -992,6 +1016,10 @@ uint8_t MacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd)
    SchUeCb        *ueCb         = NULLP;
    uint8_t        lcgIdx;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_SHORT_BSR\n");
+#endif
+
    DU_LOG("\nDEBUG  -->  SCH : Received BSR");
    cellCb = schCb[schInst].cells[schInst];
    ueCb = schGetUeCb(cellCb, bsrInd->crnti);
@@ -1029,6 +1057,10 @@ uint8_t MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd)
    SchUeCb   *ueCb; 
    SchCellCb *cellCb = schCb[inst].cells[inst];
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_UCI_IND_TO_SCH\n");
+#endif
+
    DU_LOG("\nDEBUG  -->  SCH : Received SR");
 
    ueCb = schGetUeCb(cellCb, uciInd->crnti);
index 83d3624..f5723e2 100755 (executable)
@@ -53,8 +53,74 @@ registered with SSI during the LTE MAC Task initialization.
 #include "rg_sch.x"        /* typedefs for Scheduler */
 #include "mac_sch_interface.h"
 
+/*
+* @brief
+*
+* Function:
+*   name : callFlowSchActvTsk 
+*
+*  @b Description:
+*  Function used to print values of src, dest, message
+*  received at the layer
+*
+*  @param[in] pst   - Pst Structure
+*
+*  @return void
+*/
+
+void callFlowSchActvTsk(Pst *pst)    
+{
+   char sourceTask[50];
+   char destTask[50]="ENTSCH";
+   char message[100];
+
+   switch(pst->srcEnt)
+   {
+      case ENTMAC: /* When MAC sends a msg to Scheduler instance */
+         {
+            strcpy(sourceTask,"ENTMAC");
+            switch(pst->event)
+            {
+#ifdef LCSCH
+               case EVTINFDEDBOUPDTREQ:
+                  strcpy(message,"EVTINFDEDBOUPDTREQ");
+                  break;
+               case EVTINFCMNBOUPDTREQ:
+                  strcpy(message,"EVTINFCMNBOUPDTREQ");
+                  break;   
+               case EVTINFSFRECPIND:
+                  strcpy(message,"EVTINFSFRECPIND");
+                  break;
+                  /*Fix: start: Inform UE delete to scheduler*/
+               case EVTINFUEDELIND:
+                  strcpy(message,"EVTINFUEDELIND");
+                  break;
+                  /*Fix: end: Inform UE delete to scheduler*/
+#ifdef LTE_L2_MEAS
+               case EVTINFL2MEASCFM:
+                  strcpy(message,"EVTINFL2MEASCFM");
+                  break;
+               case EVTINFL2MEASSTOPCFM:
+                  strcpy(message,"EVTINFL2MEASSTOPCFM");
+                  break;
+#endif
+#endif            
+               case EVENT_SLOT_IND_TO_SCH:
+                  strcpy(message,"EVENT_SLOT_IND_TO_SCH");
+                  break;
+               default:
+                  strcpy(message,"Invalid Event");
+                  break;
+            }
+            break;
+         }
+      default:
+         strcpy(sourceTask,"Invalid Source Entity Id");
+         break;
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 
-\f
 /**
  * @brief Task Activation callback function. 
  *
@@ -79,6 +145,11 @@ Pst     *pst,                       /* post structure       */
 Buffer  *mBuf                       /* message buffer       */
 )
 {
+
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowSchActvTsk(pst);
+#endif
+
    switch(pst->srcEnt)
    {
       /* The originator of this message is the stack manager,
index bd9b65a..3339e4e 100644 (file)
@@ -120,8 +120,8 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \
    uint16_t   tbSize         = 0;
 
    cell = schCb[schInst].cells[schInst];
-   startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.startSymbol;
-   symbLen = cell->cellCfg.schInitialUlBwp.puschCommon.lengthSymbol;
+   startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[0].startSymbol;
+   symbLen = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[0].symbolLength;
 
    startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb;
    tbSize = schCalcTbSize(8); /* 6 bytes msg3  and 2 bytes header */
@@ -203,7 +203,7 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst)
 
    //puschMu = cell->cellCfg.puschMu;
    delta = puschDeltaTable[puschMu];
-   k2 = cell->cellCfg.schInitialUlBwp.puschCommon.k2;
+   k2 = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[0].k2;
    /* RAR will sent with a delay of RAR_DELAY */
    rarSlot = (rachInd->timingInfo.slot+RAR_DELAY+PHY_DELTA_DL)%cell->numSlots;
 #ifdef NR_TDD
@@ -394,10 +394,11 @@ bool ssbPresent, bool sib1Present)
       sib1PdschFreqAlloc = &schCb[inst].cells[inst]->cellCfg.sib1SchCfg.sib1PdschCfg.pdschFreqAlloc.freqAlloc;
       pdsch->pdschFreqAlloc.freqAlloc.startPrb = sib1PdschFreqAlloc->startPrb + sib1PdschFreqAlloc->numPrb + 1; 
    }
-   pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize, mcs, initialBwp->pdschCommon.lengthSymbol);
+   pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize, mcs, \
+      initialBwp->pdschCommon.timeDomRsrcAllocList[0].lengthSymbol);
    pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */
-   pdsch->pdschTimeAlloc.timeAlloc.startSymb = initialBwp->pdschCommon.startSymbol;
-   pdsch->pdschTimeAlloc.timeAlloc.numSymb = initialBwp->pdschCommon.lengthSymbol;
+   pdsch->pdschTimeAlloc.timeAlloc.startSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[0].startSymbol;
+   pdsch->pdschTimeAlloc.timeAlloc.numSymb = initialBwp->pdschCommon.timeDomRsrcAllocList[0].lengthSymbol;
    pdsch->beamPdschInfo.numPrgs = 1;
    pdsch->beamPdschInfo.prgSize = 1;
    pdsch->beamPdschInfo.digBfInterfaces = 0;
index 6d8b7da..2b1bf57 100644 (file)
@@ -73,7 +73,7 @@ uint8_t sendDlAllocToMac(DlSchedInfo *dlSchedInfo, Inst inst)
 
    memset(&pst, 0, sizeof(Pst));
    FILL_PST_SCH_TO_MAC(pst, inst);
-   pst.event = EVENT_DL_ALLOC;
+   pst.event = EVENT_DL_SCH_INFO;
 
    return(*schMacDlAllocOpts[pst.selector])(&pst, dlSchedInfo);
 
index 84b413c..e2ce9f9 100644 (file)
@@ -357,6 +357,10 @@ uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfg)
    SchUeCfgRsp  cfgRsp;
    Inst         inst = pst->dstInst - 1;
    memset(&cfgRsp, 0, sizeof(SchUeCfgRsp));
+  
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_ADD_UE_CONFIG_REQ_TO_SCH\n");
+#endif
 
    if(!ueCfg)
    {
@@ -595,6 +599,10 @@ uint8_t MacSchModUeConfigReq(Pst *pst, SchUeCfg *ueCfg)
    SchUeCfgRsp  cfgRsp;
    Inst         inst = pst->dstInst - 1;
    memset(&cfgRsp, 0, sizeof(SchUeCfgRsp));
+  
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH\n");
+#endif
 
    if(!ueCfg)
    {
@@ -761,12 +769,22 @@ void deleteSchPdschServCellCfg(SchPdschServCellCfg *pdschServCellCfg)
 * ****************************************************************/
 void deleteSchUeCb(SchUeCb *ueCb) 
 {
+   uint8_t timeDomRsrcIdx;
    SchPucchCfg *pucchCfg = NULLP;
+   SchPdschConfig *pdschCfg = NULLP;
+
    if(ueCb)
    {
       SCH_FREE(ueCb->ueCfg.ambrCfg, sizeof(SchAmbrCfg));
       if(ueCb->ueCfg.spCellCfgPres)
       {
+         if(ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.pdschCfgPres == true)
+         {
+            pdschCfg = &ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.pdschCfg;
+            for(timeDomRsrcIdx = 0; timeDomRsrcIdx < pdschCfg->numTimeDomRsrcAlloc; timeDomRsrcIdx++)
+               SCH_FREE(pdschCfg->timeDomRsrcAllociList[timeDomRsrcIdx].k0, sizeof(uint8_t));
+         }
+
          if(ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfgPres == true)
          {
             pucchCfg = &ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg;
@@ -814,7 +832,11 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete  *ueDelete)
     ErrorCause result;
     SchCellCb    *cellCb = NULLP;
     Inst         inst = pst->dstInst - 1;
-    
+   
+#ifdef CALL_FLOW_DEBUG_LOG
+    DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_UE_DELETE_REQ_TO_SCH\n");
+#endif
+
     if(!ueDelete)
     {
        DU_LOG("\nERROR  -->  SCH : MacSchUeDeleteReq(): Ue Delete request failed");
@@ -962,6 +984,10 @@ uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDelete  *cellDelete)
    uint8_t   cellIdx=0, ret = RFAILED;
    Inst      inst = pst->dstInst - 1;
    SchMacRsp result= RSP_OK;
+   
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_CELL_DELETE_REQ_TO_SCH\n");
+#endif   
 
    if(!cellDelete)
    {
index 08394e7..c5dbf84 100644 (file)
@@ -600,12 +600,19 @@ typedef struct pdcchConfigCommon
    uint8_t raSearchSpaceId;
 }PdcchConfigCommon;
 
-typedef struct pdschConfigCommon
+typedef struct pdschCfgCommTimeDomRsrcAlloc
 {
    uint8_t k0;
    uint8_t mappingType;
    uint8_t startSymbol;
    uint8_t lengthSymbol;
+}PdschCfgCommTimeDomRsrcAlloc;
+
+typedef struct pdschConfigCommon
+{
+   uint8_t  numTimeDomAlloc;
+   /* PDSCH time domain DL resource allocation list */
+   PdschCfgCommTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_DL_ALLOC]; 
 }PdschConfigCommon;
 
 typedef struct pucchConfigCommon
@@ -614,13 +621,22 @@ typedef struct pucchConfigCommon
    uint8_t pucchGroupHopping;
 }PucchConfigCommon;
 
+/* PUSCH Time Domain Resource Allocation */
+typedef struct puschTimeDomRsrcAlloc
+{
+   uint8_t   k2;
+   CommonMappingType   mappingType;
+   uint8_t           startSymbol;
+   uint8_t           symbolLength;
+   uint8_t   startSymbolAndLength;
+}PuschTimeDomRsrcAlloc;
+
+
 typedef struct puschConfigCommon
 {
    /* PUSCH-TimeDomainResourceAllocation info */
-   uint8_t k2;
-   uint8_t mappingType;
-   uint8_t startSymbol;
-   uint8_t lengthSymbol;
+   uint8_t                 numTimeDomRsrcAlloc;
+   PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
 }PuschConfigCommon;
 
 typedef struct bwpDlConfig
@@ -791,6 +807,7 @@ typedef struct pdcchConfig
 /* PDSCH time domain resource allocation */
 typedef struct pdschTimeDomRsrcAlloc
 {
+   uint8_t           *k0;
    CommonMappingType mappingType;
    uint8_t           startSymbol;
    uint8_t           symbolLength;
@@ -1041,16 +1058,6 @@ typedef struct dmrsUlCfg
    TransPrecodDisabled   transPrecodDisabled;  /* Transform precoding disabled */
 }DmrsUlCfg;
 
-/* PUSCH Time Domain Resource Allocation */
-typedef struct puschTimeDomRsrcAlloc
-{
-   uint8_t   k2;
-   CommonMappingType   mappingType;
-   uint8_t           startSymbol;
-   uint8_t           symbolLength;
-   uint8_t   startSymbolAndLength;
-}PuschTimeDomRsrcAlloc;
-
 /* PUSCH Configuration */
 typedef struct puschCfg
 {
index 495fc64..85da85c 100644 (file)
@@ -19,7 +19,7 @@
 /* events */
 #define EVENT_SCH_CELL_CFG           1
 #define EVENT_SCH_CELL_CFG_CFM       2
-#define EVENT_DL_ALLOC               3 
+#define EVENT_DL_SCH_INFO            3 
 #define EVENT_UL_SCH_INFO            4 
 #define EVENT_RACH_IND_TO_SCH        5
 #define EVENT_CRC_IND_TO_SCH         6
@@ -610,12 +610,18 @@ typedef struct schPdcchCfgCmn
    uint8_t raSearchSpaceId;
 }SchPdcchCfgCmn;
 
-typedef struct schPdschCfgCmn
+typedef struct schPdschCfgCmnTimeDomRsrcAlloc
 {
    uint8_t k0;
    uint8_t mappingType;
    uint8_t startSymbol;
    uint8_t lengthSymbol;
+}SchPdschCfgCmnTimeDomRsrcAlloc;
+
+typedef struct schPdschCfgCmn
+{
+   uint8_t   numTimeDomAlloc;
+   SchPdschCfgCmnTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_DL_ALLOC];
 }SchPdschCfgCmn;
 
 typedef struct schPucchCfgCmn
@@ -624,12 +630,19 @@ typedef struct schPucchCfgCmn
    uint8_t pucchGroupHopping;
 }SchPucchCfgCmn;
 
+/* PUSCH Time Domain Resource Allocation */
+typedef struct schPuschTimeDomRsrcAlloc
+{
+   uint8_t   k2;
+   SchTimeDomRsrcAllocMappingType   mappingType;
+   uint8_t   startSymbol;
+   uint8_t   symbolLength;
+}SchPuschTimeDomRsrcAlloc;
+
 typedef struct schPuschCfgCmn
 {
-   uint8_t k2;
-   uint8_t mappingType;
-   uint8_t startSymbol;
-   uint8_t lengthSymbol;
+   uint8_t                    numTimeDomRsrcAlloc;
+   SchPuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
 }SchPuschCfgCmn;
 
 typedef struct schBwpDlCfg
@@ -1051,6 +1064,7 @@ typedef struct schPdcchConfig
 /* PDSCH time domain resource allocation */
 typedef struct schPdschTimeDomRsrcAlloc
 {
+   uint8_t    *k0;
    SchTimeDomRsrcAllocMappingType    mappingType;
    uint8_t    startSymbol;
    uint8_t    symbolLength;
@@ -1289,15 +1303,6 @@ typedef struct SchDmrsUlCfg
    SchTransPrecodDisabled     transPrecodDisabled;  /* Transform precoding disabled */
 }SchDmrsUlCfg;
 
-/* PUSCH Time Domain Resource Allocation */
-typedef struct schPuschTimeDomRsrcAlloc
-{
-   uint8_t   k2;
-   SchTimeDomRsrcAllocMappingType   mappingType;
-   uint8_t   startSymbol;
-   uint8_t   symbolLength;
-}SchPuschTimeDomRsrcAlloc;
-
 /* PUSCH Configuration */
 typedef struct schPuschCfg
 {
index 3751ae2..07e176c 100644 (file)
@@ -72,6 +72,7 @@
 #include "SRS-Resource.h"
 #include "SRS-ResourceSet.h"
 #include "SRS-Config.h"
+#include "PUCCH-Config.h"
 #include "BWP-UplinkDedicated.h"
 #include "PUSCH-ServingCellConfig.h"
 #include "UplinkConfig.h"
 #define PDSCH_MAPPING_TYPE_B 1
 
 /* MACRO Define for PUSCH Configuration */
-#define PUSCH_K2  3
+#define PUSCH_K2_CFG1  3
+#define PUSCH_K2_CFG2  4
 
 #define PUSCH_MSG3_DELTA_PREAMBLE 0
 #define PUSCH_P0_NOMINAL_WITH_GRANT -70
@@ -3197,7 +3199,7 @@ uint8_t BuildTCIStatesToAddModList(struct PDSCH_Config__tci_StatesToAddModList *
       return RFAILED;
    }
 
-   elementCnt = 1;
+   elementCnt = 2;
    timeDomAllocList->choice.setup->list.count = elementCnt;
    timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(struct PDSCH_TimeDomainResourceAllocation *);
@@ -3225,8 +3227,25 @@ uint8_t BuildTCIStatesToAddModList(struct PDSCH_Config__tci_StatesToAddModList *
 
    idx = 0;
    timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   CU_ALLOC(timeDomAlloc->k0, sizeof(long));
+   if(!timeDomAlloc->k0)
+   {
+       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+       return RFAILED;
+   }
+   *(timeDomAlloc->k0) = 0;
+   timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
+   timeDomAlloc->startSymbolAndLength = 66;
 
-   timeDomAlloc->k0 = NULLP;
+   idx++;
+   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   CU_ALLOC(timeDomAlloc->k0, sizeof(long));
+   if(!timeDomAlloc->k0)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+      return RFAILED;
+   }
+   *(timeDomAlloc->k0) = 1;
    timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
    timeDomAlloc->startSymbolAndLength = 66;
 
@@ -3535,7 +3554,7 @@ uint8_t BuildInitialDlBWP(BWP_DownlinkDedicated_t *dlBwp)
       return RFAILED;
    }
 
-   elementCnt = 1;
+   elementCnt = 2;
    timeDomAllocList->choice.setup->list.count = elementCnt;
    timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
@@ -3568,9 +3587,22 @@ uint8_t BuildInitialDlBWP(BWP_DownlinkDedicated_t *dlBwp)
       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
       return RFAILED;
    }
-   *(timeDomAlloc->k2) = PUSCH_K2;
+   *(timeDomAlloc->k2) = PUSCH_K2_CFG1;
    timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
    timeDomAlloc->startSymbolAndLength = 66; 
+
+   idx++;
+   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   CU_ALLOC(timeDomAlloc->k2, sizeof(long));
+   if(!timeDomAlloc->k2)
+   {
+       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+       return RFAILED;
+   }
+   *(timeDomAlloc->k2) = PUSCH_K2_CFG2;
+   timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
+   timeDomAlloc->startSymbolAndLength = 66;
+
    return ROK;
 }
 
@@ -3658,6 +3690,61 @@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Config_t *puschCfg)
    return ROK;
 }
 
+/*******************************************************************
+ *
+ * @brief Builds BWP UL dedicated PUCCH Config
+ *
+ * @details
+ *
+ *    Function : BuildBWPUlDedPucchCfg
+ *
+ *    Functionality:
+ *      Builds BWP UL dedicated PUCCH Config
+ *
+ * @params[in] : PUCCH_Config_t *pucchCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg)
+{
+   uint8_t arrIdx, elementCnt;
+
+   CU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
+   if(pucchCfg->dl_DataToUL_ACK == NULLP)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+      return RFAILED;
+   }
+
+   elementCnt = 2;
+   pucchCfg->dl_DataToUL_ACK->list.count = elementCnt;
+   pucchCfg->dl_DataToUL_ACK->list.size = elementCnt * sizeof(long *);
+   CU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
+   if(pucchCfg->dl_DataToUL_ACK->list.array == NULLP)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+      return RFAILED;
+   }
+
+   for(arrIdx = 0; arrIdx <  pucchCfg->dl_DataToUL_ACK->list.count; arrIdx++)
+   {
+      CU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx], sizeof(long));
+      if(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx] == NULLP)
+      {
+          DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+          return RFAILED;
+      }
+   }
+
+   arrIdx = 0;
+   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 1;
+   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 2;
+
+   return ROK;
+}
+
 /*******************************************************************
  *
  * @brief Fills SRS resource to add/modify list 
@@ -3932,6 +4019,27 @@ uint8_t BuildBWPUlDedSrsCfg(SRS_Config_t *srsCfg)
 uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
 {
    ulBwp->pucch_Config = NULLP;
+   ulBwp->pucch_Config = NULLP;
+   CU_ALLOC(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
+   if(!ulBwp->pucch_Config)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+
+   ulBwp->pucch_Config->present = BWP_UplinkDedicated__pucch_Config_PR_setup;
+   ulBwp->pucch_Config->choice.setup = NULLP;
+   CU_ALLOC(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
+   if(!ulBwp->pucch_Config->choice.setup)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+
+   if(BuildBWPUlDedPucchCfg(ulBwp->pucch_Config->choice.setup) != ROK)
+   {
+      return RFAILED;
+   }
 
    /* Fill BWP UL dedicated PUSCH config */
    ulBwp->pusch_Config = NULLP;
index b98c2cd..ac754e4 100644 (file)
@@ -142,6 +142,8 @@ void FillSlotConfig()
 /* This function is used to fill up the cell configuration for CL */
 uint8_t readMacCfg()
 {
+   uint8_t idx;
+
    duCfgParam.macCellCfg.carrierId = CARRIER_IDX;
 
    /* Cell configuration */
@@ -300,13 +302,25 @@ uint8_t readMacCfg()
       candidate.aggLevel8      = 1;
    duCfgParam.macCellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.
       candidate.aggLevel16     = 0;
-   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.k0 = PDSCH_K0;
-   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.mappingType = 
+
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.numTimeDomAlloc = 2;
+   idx = 0;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0 = PDSCH_K0_CFG1;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType = 
       PDSCH_MAPPING_TYPE_A;
-   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.startSymbol = 
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol = 
       PDSCH_START_SYMBOL;
-   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.lengthSymbol =
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol =
       PDSCH_LENGTH_SYMBOL;
+   idx++;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0 = PDSCH_K0_CFG2;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType = 
+      PDSCH_MAPPING_TYPE_A;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol = 
+      PDSCH_START_SYMBOL;
+   duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol =
+      PDSCH_LENGTH_SYMBOL;
+
    /* ra-searchSpace ID is set to 1 */
    duCfgParam.macCellCfg.initialDlBwp.pdcchCommon.raSearchSpaceId = SEARCHSPACE_1_INDEX;
 
@@ -319,15 +333,25 @@ uint8_t readMacCfg()
    duCfgParam.macCellCfg.initialUlBwp.bwp.scs = SCS_15KHZ; /* numerology is 0, 15Khz */
 #endif
    duCfgParam.macCellCfg.initialUlBwp.bwp.cyclicPrefix = NORMAL_CYCLIC_PREFIX;
-   duCfgParam.macCellCfg.initialUlBwp.puschCommon.k2 = PUSCH_K2;
-   duCfgParam.macCellCfg.initialUlBwp.puschCommon.mappingType = 
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.numTimeDomRsrcAlloc = 2;
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[0].k2 = PUSCH_K2_CFG1;
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[0].mappingType = 
       PUSCH_MAPPING_TYPE_A;
-   duCfgParam.macCellCfg.initialUlBwp.puschCommon.startSymbol = 
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[0].startSymbol = 
       PUSCH_START_SYMBOL;
-   duCfgParam.macCellCfg.initialUlBwp.puschCommon.lengthSymbol =
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[0].symbolLength =
+      PUSCH_LENGTH_SYMBOL;
+
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[1].k2 = PUSCH_K2_CFG2;
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[1].mappingType = 
+      PUSCH_MAPPING_TYPE_A;
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[1].startSymbol = 
+      PUSCH_START_SYMBOL;
+   duCfgParam.macCellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[1].symbolLength =
       PUSCH_LENGTH_SYMBOL;
 
    duCfgParam.macCellCfg.dmrsTypeAPos = DMRS_TYPE_A_POS; 
+
    /* fill PUCCH config common */
    duCfgParam.macCellCfg.initialUlBwp.pucchCommon.pucchResourceCommon = PUCCH_RSRC_COMMON;
    duCfgParam.macCellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_GROUP_HOPPING;
@@ -461,10 +485,16 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
 
    /* Configuring PDSCH Config Common For SIB1 */
    pdschCfg.present = BWP_DownlinkCommon__pdsch_ConfigCommon_PR_setup;
-   pdschCfg.k0 = PDSCH_K0;
-   pdschCfg.mapType = \
+   pdschCfg.numTimeDomRsrcAlloc = 2;
+   pdschCfg.timeDomAlloc[0].k0 = PDSCH_K0_CFG1;
+   pdschCfg.timeDomAlloc[0].mapType = \
+      PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
+   pdschCfg.timeDomAlloc[0].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL);
+   pdschCfg.timeDomAlloc[1].k0 = PDSCH_K0_CFG2;
+   pdschCfg.timeDomAlloc[1].mapType = \
       PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
-   pdschCfg.sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL);
+   pdschCfg.timeDomAlloc[1].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL);
+
    srvCellCfgComm->dlCfg.pdschCfg = pdschCfg;
 
    /* Configuring BCCH Config for SIB1 */
@@ -514,10 +544,14 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
    srvCellCfgComm->ulCfg.rachCfg = rachCfg;
 
    /* Configuring PUSCH Config Common for SIB1 */
-   puschCfg.present = BWP_UplinkCommon__pusch_ConfigCommon_PR_setup;
-   puschCfg.k2 = PUSCH_K2;
-   puschCfg.mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
-   puschCfg.sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
+   puschCfg.puschCfgPresent = BWP_UplinkCommon__pusch_ConfigCommon_PR_setup;
+   puschCfg.numTimeDomRsrcAlloc = 2;
+   puschCfg.timeDomAllocList[0].k2 = PUSCH_K2_CFG1;
+   puschCfg.timeDomAllocList[0].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
+   puschCfg.timeDomAllocList[0].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
+   puschCfg.timeDomAllocList[1].k2 = PUSCH_K2_CFG2;
+   puschCfg.timeDomAllocList[1].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
+   puschCfg.timeDomAllocList[1].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
    puschCfg.msg3DeltaPreamble = PUSCH_MSG3_DELTA_PREAMBLE;
    puschCfg.p0NominalWithGrant = PUSCH_P0_NOMINAL_WITH_GRANT;
    srvCellCfgComm->ulCfg.puschCfg = puschCfg;
index ffe5978..fabeaaf 100644 (file)
 #define SIB1_VALUE_TAG 10
 
 /* MACRO Ddefine for PDSCH Configuration */
-#define PDSCH_K0  0
+#define PDSCH_K0_CFG1  0
+#define PDSCH_K0_CFG2  1
 #define PDSCH_START_SYMBOL  3
 #define PDSCH_LENGTH_SYMBOL 11
 #define PDSCH_RES_ALLOC_TYPE       1          /* Resource allocation type */
 #define PDSCH_NUM_HARQ_PROC 5
 
 /* MACRO Define for PUSCH Configuration */
-#define PUSCH_K2  3
+#define MAX_UL_ALLOC 16
+#define PUSCH_K2_CFG1  3
+#define PUSCH_K2_CFG2  4
 #define PUSCH_START_SYMBOL  3
 #define PUSCH_LENGTH_SYMBOL 11
 
@@ -1086,12 +1089,18 @@ typedef struct pdcchCfgCommon
    long     raSearchSpc;           /* Id of search space for Random Access proc */
 }PdcchCfgCommon;
 
-typedef struct pdschCfgCommon
+typedef struct pdschTimeDomainRsrcAlloc
 {
-   uint8_t  present;
    long     k0;
    long     mapType;              /* Mapping Type */
    uint16_t sliv;  
+}PdschTimeDomainRsrcAlloc;
+
+typedef struct pdschCfgCommon
+{
+   uint8_t  present;
+   uint8_t  numTimeDomRsrcAlloc;
+   PdschTimeDomainRsrcAlloc timeDomAlloc[MAX_NUM_DL_ALLOC];
 }PdschCfgCommon;
 
 typedef struct bcchCfg
@@ -1149,12 +1158,18 @@ typedef struct rachCfgCommon
    long   restrictedSetCfg;  /* Restricted set configuration */
 }RachCfgCommon;
 
-typedef struct  puschCfgCommon
+typedef struct puschCfgCmnTimeDomAlloc
 {
-   uint8_t  present;
    long     k2;
    long     mapType;
    uint16_t sliv;
+}PuschCfgCmnTimeDomAlloc;
+
+typedef struct  puschCfgCommon
+{
+   uint8_t  puschCfgPresent;
+   uint8_t  numTimeDomRsrcAlloc;
+   PuschCfgCmnTimeDomAlloc timeDomAllocList[MAX_UL_ALLOC];
    long     msg3DeltaPreamble;
    long     p0NominalWithGrant;
 }PuschCfgCommon;
index 3b77996..b895aa2 100644 (file)
@@ -63,6 +63,102 @@ uint8_t egtpActvInit(Ent entity, Inst inst, Region region, Reason reason)
   return ROK;
 }
 
+/**************************************************************************
+* @brief Function prints the src dest and msg reached to egtp.
+*
+* @details
+*
+*      Function : callFlowEgtpActvTsk 
+*
+*      Functionality:
+*           Function prints the src dest and msg reached to egtp.
+*
+* @param[in]  Pst     *pst, Post structure of the primitive.
+*
+* @return void 
+*
+***************************************************************************/
+
+void callFlowEgtpActvTsk(Pst *pst)
+{
+
+   char sourceTask[50];
+   char destTask[50]="ENTEGTP";
+   char message[100];
+
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+               case EVTCFGREQ:
+                  {
+                     strcpy(message,"EVTCFGREQ");
+                     break;
+                  }
+               case EVTSRVOPENREQ:
+                  {
+                     strcpy(message,"EVTSRVOPENREQ");
+                     break;
+                  }
+               case EVTTNLMGMTREQ:
+                  {
+                     strcpy(message,"EVTTNLMGMTREQ");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+            break;
+         }
+      case ENTEGTP:
+         {
+            strcpy(sourceTask,"ENTEGTP");
+            switch(pst->event)
+            {
+               case EVTSTARTPOLL:
+                  {
+                     strcpy(message,"EVTSTARTPOLL");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+            break;
+         }
+      case ENTRLC:
+         {
+            strcpy(sourceTask,"ENTRLC");
+            switch(pst->event)
+            {
+               case EVTDATIND:
+                  {
+                     strcpy(message,"EVTDATIND");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+            break;
+         }
+      default:
+         {
+             strcpy(sourceTask,"Invalid Source Entity Id");
+         }
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 
 /**************************************************************************
  * @brief Task Activation callback function. 
@@ -86,6 +182,10 @@ uint8_t egtpActvInit(Ent entity, Inst inst, Region region, Reason reason)
 uint8_t egtpActvTsk(Pst *pst, Buffer *mBuf)
 {
    uint8_t ret = ROK;
+  
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowEgtpActvTsk(pst);
+#endif
 
    switch(pst->srcEnt)
    {
@@ -377,6 +477,10 @@ uint8_t egtpTnlMgmtReq(Pst *pst, EgtpTnlEvt tnlEvt)
 {
    uint8_t ret = ROK;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTDUAPP -> ENTEGTP : TNL_MGMT\n");
+#endif
+
    DU_LOG("\nDEBUG   -->  EGTP : Received tunnel management request");
    switch(tnlEvt.action)
    {
@@ -566,6 +670,10 @@ uint8_t egtpHdlDatInd(EgtpMsg egtpMsg)
    uint32_t    msgLen;
    EgtpMsgHdr  *msgHdr;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTDUAPP -> ENTEGTP : DATA_INDICATION\n");
+#endif
+   
    DU_LOG("\nDEBUG  -->  EGTP : Received Data Indication");
 
    cmHashListFind(&(egtpCb.dstCb.teIdLst), (uint8_t *)&(egtpMsg.msgHdr.teId), sizeof(uint32_t), 0, (PTR *)&teidCb);
index 67c382f..d72a92d 100644 (file)
@@ -3752,7 +3752,7 @@ uint8_t BuildTCIStatesToAddModList(struct PDSCH_Config__tci_StatesToAddModList *
       return RFAILED;
    }
 
-   elementCnt = 1;
+   elementCnt = 2;
    timeDomAllocList->choice.setup->list.count = elementCnt;
    timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(struct PDSCH_TimeDomainResourceAllocation *);
@@ -3780,12 +3780,29 @@ uint8_t BuildTCIStatesToAddModList(struct PDSCH_Config__tci_StatesToAddModList *
 
    idx = 0;
    timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
-
-   timeDomAlloc->k0 = NULLP;
+   DU_ALLOC(timeDomAlloc->k0, sizeof(long));
+   if(!timeDomAlloc->k0)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+      return RFAILED;
+   }
+   *(timeDomAlloc->k0) = 0;
    timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
    timeDomAlloc->startSymbolAndLength = \
                                        calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
 
+   idx++;
+   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   DU_ALLOC(timeDomAlloc->k0, sizeof(long));
+   if(!timeDomAlloc->k0)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+      return RFAILED;
+   }
+   *(timeDomAlloc->k0) = 1;
+   timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
+   timeDomAlloc->startSymbolAndLength = calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
+
    return ROK;
 }
 
@@ -4093,7 +4110,7 @@ uint8_t BuildInitialDlBWP(BWP_DownlinkDedicated_t *dlBwp)
       return RFAILED;
    }
 
-   elementCnt = 1;
+   elementCnt = 2;
    timeDomAllocList->choice.setup->list.count = elementCnt;
    timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
@@ -4126,9 +4143,22 @@ uint8_t BuildInitialDlBWP(BWP_DownlinkDedicated_t *dlBwp)
       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
       return RFAILED;
    }
-   *(timeDomAlloc->k2) = PUSCH_K2;
+   *(timeDomAlloc->k2) = PUSCH_K2_CFG1;
+   timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
+   timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
+
+   idx++;
+   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   DU_ALLOC(timeDomAlloc->k2, sizeof(long));
+   if(!timeDomAlloc->k2)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+      return RFAILED;
+   }
+   *(timeDomAlloc->k2) = PUSCH_K2_CFG2;
    timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
    timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
+
    return ROK;
 }
 
@@ -4216,6 +4246,60 @@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Config_t *puschCfg)
    return ROK;
 }
 
+/*******************************************************************
+ *
+ * @brief Builds BWP UL dedicated PUCCH Config
+ *
+ * @details
+ *
+ *    Function : BuildBWPUlDedPucchCfg
+ *
+ *    Functionality:
+ *      Builds BWP UL dedicated PUCCH Config
+ *
+ * @params[in] : PUCCH_Config_t *pucchCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg)
+{
+   uint8_t arrIdx, elementCnt;
+
+   DU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
+   if(pucchCfg->dl_DataToUL_ACK == NULLP)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+      return RFAILED;
+   }
+   
+   elementCnt = 2;
+   pucchCfg->dl_DataToUL_ACK->list.count = elementCnt;
+   pucchCfg->dl_DataToUL_ACK->list.size = elementCnt * sizeof(long *);
+   DU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
+   if(pucchCfg->dl_DataToUL_ACK->list.array == NULLP)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+      return RFAILED;
+   }   
+
+   for(arrIdx = 0; arrIdx <  pucchCfg->dl_DataToUL_ACK->list.count; arrIdx++)
+   {
+      DU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx], sizeof(long));
+      if(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx] == NULLP)
+      {
+          DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
+          return RFAILED;
+      }   
+   }
+   
+   arrIdx = 0;
+   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 1;
+   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 2;
+   return ROK;
+}
+
 /*******************************************************************
  *
  * @brief Fills SRS resource to add/modify list 
@@ -4550,6 +4634,26 @@ uint8_t BuildPuschSrvCellCfg(struct UplinkConfig__pusch_ServingCellConfig *pusch
 uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
 {
    ulBwp->pucch_Config = NULLP;
+   DU_ALLOC(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
+   if(!ulBwp->pucch_Config)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+
+   ulBwp->pucch_Config->present = BWP_UplinkDedicated__pucch_Config_PR_setup;
+   ulBwp->pucch_Config->choice.setup = NULLP;
+   DU_ALLOC(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
+   if(!ulBwp->pucch_Config->choice.setup)
+   {
+      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+
+   if(BuildBWPUlDedPucchCfg(ulBwp->pucch_Config->choice.setup) != ROK)
+   {
+      return RFAILED;
+   }
 
    /* Fill BWP UL dedicated PUSCH config */
    ulBwp->pusch_Config = NULLP;
@@ -5097,7 +5201,7 @@ void FreeSearchSpcToAddModList(struct PDCCH_Config__searchSpacesToAddModList *se
  *
  * @return void
  *
4221 * ****************************************************************/
+ * ****************************************************************/
 void FreePdschTimeDomAllocList( struct PDSCH_Config__pdsch_TimeDomainAllocationList *timeDomAllocList)
 {
    uint8_t idx1=0;
@@ -5106,16 +5210,17 @@ void FreePdschTimeDomAllocList( struct PDSCH_Config__pdsch_TimeDomainAllocationL
    {
       if(timeDomAllocList->choice.setup->list.array)
       {
-        for(idx1 = 0; idx1 <timeDomAllocList->choice.setup->list.count ; idx1++)
-        {
-           DU_FREE(timeDomAllocList->choice.setup->list.array[idx1],
-                 sizeof(struct PDSCH_TimeDomainResourceAllocation));
-        }
-        DU_FREE(timeDomAllocList->choice.setup->list.array, \
-              timeDomAllocList->choice.setup->list.size);
+         for(idx1 = 0; idx1 <timeDomAllocList->choice.setup->list.count ; idx1++)
+         {
+            DU_FREE(timeDomAllocList->choice.setup->list.array[idx1]->k0, sizeof(long));
+            DU_FREE(timeDomAllocList->choice.setup->list.array[idx1],
+                  sizeof(struct PDSCH_TimeDomainResourceAllocation));
+         }
+         DU_FREE(timeDomAllocList->choice.setup->list.array, \
+               timeDomAllocList->choice.setup->list.size);
       }
       DU_FREE(timeDomAllocList->choice.setup,\
-           sizeof(struct PDSCH_TimeDomainResourceAllocationList));
+            sizeof(struct PDSCH_TimeDomainResourceAllocationList));
    }
 }
 /*******************************************************************
@@ -5181,122 +5286,145 @@ void FreePuschTimeDomAllocList(PUSCH_Config_t *puschCfg)
  * ****************************************************************/
 void FreeInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
 {
-   uint8_t  rSetIdx, rsrcIdx;
+   uint8_t  rSetIdx, rsrcIdx, k1Idx;
    SRS_Config_t   *srsCfg = NULLP;
    PUSCH_Config_t *puschCfg = NULLP;
+   PUCCH_Config_t *pucchCfg = NULLP;
    struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA *dmrsUlCfg = NULLP;
    struct SRS_Config__srs_ResourceSetToAddModList *rsrcSetList = NULLP;
    struct SRS_ResourceSet__srs_ResourceIdList *rsrcIdList = NULLP;
    struct SRS_Config__srs_ResourceToAddModList *resourceList = NULLP;
 
+   if(ulBwp->pucch_Config)
+   {
+      if(ulBwp->pucch_Config->choice.setup)
+      {
+          pucchCfg = ulBwp->pucch_Config->choice.setup;
+          if(pucchCfg->dl_DataToUL_ACK)
+          {
+             if(pucchCfg->dl_DataToUL_ACK->list.array)
+             {
+                for(k1Idx = 0; k1Idx < pucchCfg->dl_DataToUL_ACK->list.count; k1Idx++)
+                {
+                   DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array[k1Idx], sizeof(long));
+                }
+                DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
+             }
+             DU_FREE(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
+          }
+          DU_FREE(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
+      }
+      DU_FREE(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
+   }
+
    if(ulBwp->pusch_Config)
    {
       if(ulBwp->pusch_Config->choice.setup)
       {
-        puschCfg=ulBwp->pusch_Config->choice.setup;
-        if(puschCfg->dataScramblingIdentityPUSCH)
-        {
-           if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
-           {
-              FreePuschTimeDomAllocList(puschCfg);
-              dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA;
-              if(dmrsUlCfg->choice.setup)
-              {
-                 if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition)
-                 {
-                    if(dmrsUlCfg->choice.setup->transformPrecodingDisabled)
-                    {
-                       DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\
-                             sizeof(long));
-                       DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled,
-                             sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled));
-                    }
-                    DU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition,
-                          sizeof(long));
-                 }
-                 DU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t));
-              }
-              DU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \
-                    sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
-           }
-           DU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
-        }
-        DU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t));
+         puschCfg=ulBwp->pusch_Config->choice.setup;
+         if(puschCfg->dataScramblingIdentityPUSCH)
+         {
+            if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
+            {
+               FreePuschTimeDomAllocList(puschCfg);
+               dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA;
+               if(dmrsUlCfg->choice.setup)
+               {
+                  if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition)
+                  {
+                     if(dmrsUlCfg->choice.setup->transformPrecodingDisabled)
+                     {
+                        DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\
+                              sizeof(long));
+                        DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled,
+                              sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled));
+                     }
+                     DU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition,
+                           sizeof(long));
+                  }
+                  DU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t));
+               }
+               DU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \
+                     sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
+            }
+            DU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
+         }
+         DU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t));
       }
       DU_FREE(ulBwp->pusch_Config, sizeof(struct BWP_UplinkDedicated__pusch_Config));
 
       /* Free SRS-Config */
       if(ulBwp->srs_Config)
       {
-        if(ulBwp->srs_Config->choice.setup)
-        {
-           srsCfg = ulBwp->srs_Config->choice.setup;
+         if(ulBwp->srs_Config->choice.setup)
+         {
+            srsCfg = ulBwp->srs_Config->choice.setup;
 
-           /* Free Resource Set to add/mod list */
-           if(srsCfg->srs_ResourceSetToAddModList)
-           {
-              rsrcSetList = srsCfg->srs_ResourceSetToAddModList;
-              if(rsrcSetList->list.array)
-              {
-                 rSetIdx = 0;
+            /* Free Resource Set to add/mod list */
+            if(srsCfg->srs_ResourceSetToAddModList)
+            {
+               rsrcSetList = srsCfg->srs_ResourceSetToAddModList;
+               if(rsrcSetList->list.array)
+               {
+                  rSetIdx = 0;
 
-                 /* Free SRS resource Id list in this SRS resource set */
-                 if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList)
-                 {
-                    rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList;
+                  /* Free SRS resource Id list in this SRS resource set */
+                  if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList)
+                  {
+                     rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList;
 
-                    if(rsrcIdList->list.array)
-                    {
-                       for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++)
-                       {
-                          DU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t));
-                       }
-                       DU_FREE(rsrcIdList->list.array, rsrcIdList->list.size);
-                    }
-                    DU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\
-                          sizeof(struct SRS_ResourceSet__srs_ResourceIdList));
-                 }
+                     if(rsrcIdList->list.array)
+                     {
+                        for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++)
+                        {
+                           DU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t));
+                        }
+                        DU_FREE(rsrcIdList->list.array, rsrcIdList->list.size);
+                     }
+                     DU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\
+                           sizeof(struct SRS_ResourceSet__srs_ResourceIdList));
+                  }
 
-                 /* Free resource type info for this SRS resource set */
-                 DU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \
-                       sizeof(struct SRS_ResourceSet__resourceType__aperiodic));
+                  /* Free resource type info for this SRS resource set */
+                  DU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \
+                        sizeof(struct SRS_ResourceSet__resourceType__aperiodic));
 
-                 /* Free memory for each resource set */
-                 for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++)
-                 {
-                    DU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t));
-                 }
-                 DU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); 
-              }
-              DU_FREE(srsCfg->srs_ResourceSetToAddModList, \
-                    sizeof(struct SRS_Config__srs_ResourceSetToAddModList));
-           }
+                  /* Free memory for each resource set */
+                  for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++)
+                  {
+                     DU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t));
+                  }
+                  DU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); 
+               }
+               DU_FREE(srsCfg->srs_ResourceSetToAddModList, \
+                     sizeof(struct SRS_Config__srs_ResourceSetToAddModList));
+            }
 
-           /* Free resource to add/modd list */
-           if(srsCfg->srs_ResourceToAddModList)
-           {
-              resourceList = srsCfg->srs_ResourceToAddModList;
-              if(resourceList->list.array)
-              {
-                 rsrcIdx = 0;
-                 DU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\
-                       sizeof(struct SRS_Resource__transmissionComb__n2));
-                 DU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\
-                       sizeof(struct SRS_Resource__resourceType__aperiodic));
+            /* Free resource to add/modd list */
+            if(srsCfg->srs_ResourceToAddModList)
+            {
+               resourceList = srsCfg->srs_ResourceToAddModList;
+               if(resourceList->list.array)
+               {
+                  rsrcIdx = 0;
+                  DU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\
+                        sizeof(struct SRS_Resource__transmissionComb__n2));
+                  DU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\
+                        sizeof(struct SRS_Resource__resourceType__aperiodic));
 
-                 for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++)
-                 {
-                    DU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t));
-                 }
-                 DU_FREE(resourceList->list.array, resourceList->list.size);
-              }
-              DU_FREE(srsCfg->srs_ResourceToAddModList, \
-                    sizeof(struct SRS_Config__srs_ResourceToAddModList));
-           }
+                  for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++)
+                  {
+                     DU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t));
+                  }
+                  DU_FREE(resourceList->list.array, resourceList->list.size);
+               }
+               DU_FREE(srsCfg->srs_ResourceToAddModList, \
+                     sizeof(struct SRS_Config__srs_ResourceToAddModList));
+            }
 
-           DU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t));
-        }
-        DU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config));
+            DU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t));
+         }
+         DU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config));
       }
    }
 }      
@@ -5508,37 +5636,37 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
    {
       if(rlcBearerList->list.array)
       {
-        for(idx=0; idx<rlcBearerList->list.count; idx++)
-        {
-           if(rlcBearerList->list.array[idx])
-           {  
-              rlcConfig   = rlcBearerList->list.array[idx]->rlc_Config;
-              macLcConfig = rlcBearerList->list.array[idx]->mac_LogicalChannelConfig;
-              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));
-              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);
+         for(idx=0; idx<rlcBearerList->list.count; idx++)
+         {
+            if(rlcBearerList->list.array[idx])
+            {  
+               rlcConfig   = rlcBearerList->list.array[idx]->rlc_Config;
+               macLcConfig = rlcBearerList->list.array[idx]->mac_LogicalChannelConfig;
+               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));
+               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);
       }
       DU_FREE(cellGrpCfg->rlc_BearerToAddModList, sizeof(struct CellGroupConfigRrc__rlc_BearerToAddModList));
    }
@@ -5549,53 +5677,53 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
       schedulingRequestConfig = macCellGrpCfg->schedulingRequestConfig; 
       if(schedulingRequestConfig)
       {
-        schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
-        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));
+         schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
+         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(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
+         DU_FREE(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
       }
       tagConfig = macCellGrpCfg->tag_Config;
       if(tagConfig)
       {
-        tagList = tagConfig->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));
+         tagList = tagConfig->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;
       if(phrConfig)
       {
-        DU_FREE(phrConfig->choice.setup, sizeof(struct PHR_Config));
-        DU_FREE(phrConfig, sizeof(struct MAC_CellGroupConfig__phr_Config));
+         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));
@@ -5613,59 +5741,59 @@ uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
    {
       if(spCellCfg->servCellIndex)
       {
-        if(spCellCfg->rlmInSyncOutOfSyncThreshold)
-        {
-           if(spCellCfg->spCellConfigDedicated)
-           {
-              srvCellCfg = spCellCfg->spCellConfigDedicated;
-              if(srvCellCfg->tdd_UL_DL_ConfigurationDedicated)
-              {
-                 if(srvCellCfg->initialDownlinkBWP)
-                 {
-                    dlBwp = srvCellCfg->initialDownlinkBWP;
-                    if(srvCellCfg->firstActiveDownlinkBWP_Id)
-                    {
-                       if(srvCellCfg->defaultDownlinkBWP_Id)
-                       {
-                          if(srvCellCfg->uplinkConfig)
-                          {
-                             if(srvCellCfg->pdsch_ServingCellConfig)
-                             {
-                                pdschCfg= srvCellCfg->pdsch_ServingCellConfig;
-                                if(pdschCfg->choice.setup)
-                                {
-                                   DU_FREE(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH,sizeof(long));
-                                   DU_FREE(pdschCfg->choice.setup, sizeof( struct PDSCH_ServingCellConfig));
-                                }
-                                DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct
-                                      ServingCellConfig__pdsch_ServingCellConfig));
-                             }  
-                             FreeinitialUplinkBWP(srvCellCfg->uplinkConfig);
-                             DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));        
-                          }
-                          DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
-                       }
-                       DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
-                    }
-                    if(dlBwp->pdcch_Config)
-                    {
-                       if(dlBwp->pdsch_Config)
-                       {
-                          FreeBWPDlDedPdschCfg(dlBwp);
-                          DU_FREE(dlBwp->pdsch_Config, sizeof(struct BWP_DownlinkDedicated__pdsch_Config));
-                       }
-                       FreeBWPDlDedPdcchCfg(dlBwp);
-                       DU_FREE(dlBwp->pdcch_Config, sizeof(struct BWP_DownlinkDedicated__pdcch_Config));
-                   }
-                   DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
-                 }
-                 DU_FREE(srvCellCfg->tdd_UL_DL_ConfigurationDedicated, sizeof(TDD_UL_DL_ConfigDedicated_t));
-              }
-              DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
-           }
-           DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
-        }
-        DU_FREE(spCellCfg->servCellIndex, sizeof(long));
+         if(spCellCfg->rlmInSyncOutOfSyncThreshold)
+         {
+            if(spCellCfg->spCellConfigDedicated)
+            {
+               srvCellCfg = spCellCfg->spCellConfigDedicated;
+               if(srvCellCfg->tdd_UL_DL_ConfigurationDedicated)
+               {
+                  if(srvCellCfg->initialDownlinkBWP)
+                  {
+                     dlBwp = srvCellCfg->initialDownlinkBWP;
+                     if(srvCellCfg->firstActiveDownlinkBWP_Id)
+                     {
+                        if(srvCellCfg->defaultDownlinkBWP_Id)
+                        {
+                           if(srvCellCfg->uplinkConfig)
+                           {
+                              if(srvCellCfg->pdsch_ServingCellConfig)
+                              {
+                                 pdschCfg= srvCellCfg->pdsch_ServingCellConfig;
+                                 if(pdschCfg->choice.setup)
+                                 {
+                                    DU_FREE(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH,sizeof(long));
+                                    DU_FREE(pdschCfg->choice.setup, sizeof( struct PDSCH_ServingCellConfig));
+                                 }
+                                 DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct
+                                          ServingCellConfig__pdsch_ServingCellConfig));
+                              }  
+                              FreeinitialUplinkBWP(srvCellCfg->uplinkConfig);
+                              DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));       
+                           }
+                           DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
+                        }
+                        DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
+                     }
+                     if(dlBwp->pdcch_Config)
+                     {
+                        if(dlBwp->pdsch_Config)
+                        {
+                           FreeBWPDlDedPdschCfg(dlBwp);
+                           DU_FREE(dlBwp->pdsch_Config, sizeof(struct BWP_DownlinkDedicated__pdsch_Config));
+                        }
+                        FreeBWPDlDedPdcchCfg(dlBwp);
+                        DU_FREE(dlBwp->pdcch_Config, sizeof(struct BWP_DownlinkDedicated__pdcch_Config));
+                     }
+                     DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
+                  }
+                  DU_FREE(srvCellCfg->tdd_UL_DL_ConfigurationDedicated, sizeof(TDD_UL_DL_ConfigDedicated_t));
+               }
+               DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
+            }
+            DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
+         }
+         DU_FREE(spCellCfg->servCellIndex, sizeof(long));
       }
       DU_FREE(spCellCfg,sizeof(SpCellConfig_t));
    }
@@ -7694,11 +7822,27 @@ void freeMacPdschServCellInfo(PdschServCellCfg *pdsch)
  * ****************************************************************/
 void freeMacServingCellInfo(ServCellCfgInfo *srvCellCfg)
 {
+   uint8_t timeDomRsrcIdx;
+
+   if(srvCellCfg->initDlBwp.pdschPresent)
+   {
+      for(timeDomRsrcIdx = 0; timeDomRsrcIdx < srvCellCfg->initDlBwp.pdschCfg.numTimeDomRsrcAlloc; timeDomRsrcIdx++)
+      {
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, \
+            srvCellCfg->initDlBwp.pdschCfg.timeDomRsrcAllociList[timeDomRsrcIdx].k0, sizeof(uint8_t));
+      }
+   }
+
    freeMacPdschServCellInfo(&srvCellCfg->pdschServCellCfg);
    if(srvCellCfg->bwpInactivityTmr)
    {
       DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, srvCellCfg->bwpInactivityTmr, sizeof(uint8_t));
    }
+
+   if(srvCellCfg->initUlBwp.pucchPresent)
+   {
+      DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, srvCellCfg->initUlBwp.pucchCfg.dlDataToUlAck, sizeof(PucchDlDataToUlAck));
+   }
 }
 
 /*******************************************************************
@@ -7995,13 +8139,13 @@ void extractPdschCfg(PDSCH_Config_t *cuPdschCfg, PdschConfig *macPdschCfg)
    if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA)
    {
       if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->present == \
-         PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA_PR_setup)
+            PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA_PR_setup)
       {
          if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup)
-        {
+         {
             macPdschCfg->dmrsDlCfgForPdschMapTypeA.addPos = \
-              *(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition);
-        }
+               *(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition);
+         }
       }
    }
    macPdschCfg->resourceAllocType = cuPdschCfg->resourceAllocation;
@@ -8009,19 +8153,34 @@ void extractPdschCfg(PDSCH_Config_t *cuPdschCfg, PdschConfig *macPdschCfg)
    {
       timeDomAlloc = cuPdschCfg->pdsch_TimeDomainAllocationList;
       if(timeDomAlloc->present ==\
-         PDSCH_Config__pdsch_TimeDomainAllocationList_PR_setup)
+            PDSCH_Config__pdsch_TimeDomainAllocationList_PR_setup)
       {
          if(timeDomAlloc->choice.setup)
-        {
-           macPdschCfg->numTimeDomRsrcAlloc  = timeDomAlloc->choice.setup->list.count;
+         {
+            macPdschCfg->numTimeDomRsrcAlloc  = timeDomAlloc->choice.setup->list.count;
             for(timeDomIdx = 0; timeDomIdx < timeDomAlloc->choice.setup->list.count; timeDomIdx++)
             {
-              macPdschCfg->timeDomRsrcAllociList[timeDomIdx].mappingType = \
-                 timeDomAlloc->choice.setup->list.array[timeDomIdx]->mappingType;
-              macPdschCfg->timeDomRsrcAllociList[timeDomIdx].startSymbolAndLength = \
-                 timeDomAlloc->choice.setup->list.array[timeDomIdx]->startSymbolAndLength;
-           }
-        }
+               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0 = NULLP;
+               if(timeDomAlloc->choice.setup->list.array[timeDomIdx]->k0)
+               {
+                  if(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0 == NULL)
+                  {
+                     DU_ALLOC_SHRABL_BUF(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0, sizeof(uint8_t));
+                     if(!macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0)
+                     {
+                        DU_LOG("\nERROR  -->  DU APP : Memory allocation failed for k0 at extractPdschCfg()");
+                        return RFAILED;
+                     }
+                  }
+                  *(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0) = \
+                       *(timeDomAlloc->choice.setup->list.array[timeDomIdx]->k0);
+               }
+               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].mappingType = \
+                  timeDomAlloc->choice.setup->list.array[timeDomIdx]->mappingType;
+               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].startSymbolAndLength = \
+                  timeDomAlloc->choice.setup->list.array[timeDomIdx]->startSymbolAndLength;
+            }
+         }
       }
    }
    macPdschCfg->rbgSize = cuPdschCfg->rbg_Size;
@@ -8033,10 +8192,10 @@ void extractPdschCfg(PDSCH_Config_t *cuPdschCfg, PdschConfig *macPdschCfg)
       if(cuPdschCfg->prb_BundlingType.choice.staticBundling)
       {
          if(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize)
-        {
+         {
             macPdschCfg->bundlingInfo.StaticBundling.size = \
-              *(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize);
-        }
+               *(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize);
+         }
       }
    }
    else if(cuPdschCfg->prb_BundlingType.present == PDSCH_Config__prb_BundlingType_PR_dynamicBundling)
@@ -9408,7 +9567,7 @@ void freeAperDecodeDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
  * @return void 
  *
  * ****************************************************************/
-uint8_t procUeReCfgCellInfo(MacUeCfg *macUeCfg, void *cellInfo)
+uint8_t procUeReCfgCellInfo(MacUeCfg *macUeCfgToSend, void *cellInfo)
 {
    uint8_t ret = ROK;
    CellGroupConfigRrc_t *cellGrp = NULLP;
@@ -9416,13 +9575,13 @@ uint8_t procUeReCfgCellInfo(MacUeCfg *macUeCfg, void *cellInfo)
    if(cellInfo)
    {
       cellGrp = (CellGroupConfigRrc_t *)cellInfo;
-      ret = extractUeReCfgCellInfo(cellGrp, macUeCfg);
+      ret = extractUeReCfgCellInfo(cellGrp, macUeCfgToSend);
       if(ret == RFAILED)
          DU_LOG("\nERROR  -->  F1AP : Failed at procUeReCfgCellInfo()");
    }
    if(ret == RFAILED)
    {
-      freeUeReCfgCellGrpInfo(macUeCfg);
+      freeUeReCfgCellGrpInfo(macUeCfgToSend);
    }
    return ret;
 }
index 8f0391a..6241229 100644 (file)
@@ -103,6 +103,250 @@ uint8_t duActvInit(Ent entity, Inst inst, Region region, Reason reason)
 
 }
 
+/**************************************************************************
+* @brief Function prints the src dest and msg reached to egtp.
+*
+* @details
+*
+*      Function : callFlowduActvTsk 
+*
+*      Functionality:
+*           Function prints the src dest and msg reached to egtp.
+*
+* @param[in]  Pst     *pst, Post structure of the primitive.
+*
+* @return void
+*
++***************************************************************************/
+
+void callFlowduActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="ENTDUAPP";
+   char message[100];
+   
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+               case EVTCFG:
+                  {
+                     strcpy(message,"EVTCFG");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+
+            break;
+         }
+      case ENTRLC:
+         {
+            strcpy(sourceTask,"ENTRLC");
+            switch(pst->event)
+            {
+               case LKW_EVT_CFG_CFM:
+                  {
+                     strcpy(message,"LKW_EVT_CFG_CFM");
+                     break;
+                  }
+               case LKW_EVT_CNTRL_CFM:
+                  {
+                     strcpy(message,"LKW_EVT_CNTRL_CFM");
+                     break;
+                  }
+               case LKW_EVT_STA_IND:
+                  {
+                     strcpy(message,"LKW_EVT_STA_IND");
+                     break;
+                  }
+               case EVENT_RLC_UE_CREATE_RSP:
+                  {
+                     strcpy(message,"EVENT_RLC_UE_CREATE_RSP");
+                     break;
+                  }
+               case EVENT_RLC_UE_RECONFIG_RSP:
+                  {
+                     strcpy(message,"EVENT_RLC_UE_RECONFIG_RSP");
+                     break;
+                  }
+               case EVENT_RLC_UE_DELETE_RSP:
+                  {
+                     strcpy(message,"EVENT_RLC_UE_DELETE_RSP");
+                     break;
+                  }
+               case EVENT_UL_RRC_MSG_TRANS_TO_DU:
+                  {
+                     strcpy(message,"EVENT_UL_RRC_MSG_TRANS_TO_DU");
+                     break;
+                  }
+               case EVENT_RRC_DELIVERY_MSG_TRANS_TO_DU:
+                  {
+                     strcpy(message,"EVENT_RRC_DELIVERY_MSG_TRANS_TO_DU");
+                     break;
+                  }
+               case EVENT_DL_RRC_MSG_RSP_TO_DU:
+                  {
+                     strcpy(message,"EVENT_DL_RRC_MSG_RSP_TO_DU");
+                     break;
+                  }
+               case EVENT_UL_USER_DATA_TRANS_TO_DU:
+                  {
+                     strcpy(message,"EVENT_UL_USER_DATA_TRANS_TO_DU");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                  }
+            }
+            break;
+         }
+      case ENTMAC:
+         {
+            strcpy(sourceTask,"ENTMAC");
+            switch(pst->event)
+            {
+               case EVTCFG:
+                  {
+                     strcpy(message,"EVTCFG");
+                     break;
+                  }
+               case EVTLRGCFGCFM:
+                  {
+                     strcpy(message,"EVTLRGCFGCFM");
+                     break;
+                  }
+               case EVTLRGCNTRLCFM:
+                  {
+                     strcpy(message,"EVTLRGCNTRLCFM");
+                     break;
+                  }
+               case EVTMACSCHGENCFGCFM:
+                  {
+                     strcpy(message,"EVTMACSCHGENCFGCFM");
+                     break;
+                  }
+               case EVENT_MAC_CELL_CONFIG_CFM:
+                  {
+                     strcpy(message,"EVENT_MAC_CELL_CONFIG_CFM");
+                     break;
+                  }
+               case EVENT_MAC_CELL_UP_IND:
+                  {
+                     strcpy(message,"EVENT_MAC_CELL_UP_IND");
+                     break;
+                  }
+               case EVENT_MAC_STOP_IND:
+                  {
+                     strcpy(message,"EVENT_MAC_STOP_IND");
+                     break;
+                  }
+               case EVENT_MAC_UL_CCCH_IND:
+                  {
+                     strcpy(message,"EVENT_MAC_UL_CCCH_IND");
+                     break;
+                  }
+               case EVENT_MAC_UE_CREATE_RSP:
+                  {
+                     strcpy(message,"EVENT_MAC_UE_CREATE_RSP");
+                     break;
+                  }
+               case EVENT_MAC_UE_RECONFIG_RSP:
+                  {
+                     strcpy(message,"EVENT_MAC_UE_RECONFIG_RSP");
+                     break;
+                  }
+               case EVENT_MAC_UE_DELETE_RSP:
+                  {
+                     strcpy(message,"EVENT_MAC_UE_DELETE_RSP");
+                     break;
+                  }
+               case EVENT_MAC_CELL_DELETE_RSP:
+                  {
+                     strcpy(message,"EVENT_MAC_CELL_DELETE_RSP");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+
+            break;
+         }
+      case ENTSCTP:
+         {
+            strcpy(sourceTask,"ENTSCTP");
+            switch(pst->event)
+            {
+               case EVENT_CU_DATA:
+                  {
+                     strcpy(message,"EVENT_CU_DATA");
+                     break;
+                  }
+               case EVENT_SCTP_NTFY:
+                  {
+                     strcpy(message,"EVENT_SCTP_NTFY");
+                     break;
+                  }
+               case EVENT_RIC_DATA:
+                  {
+                     strcpy(message,"EVENT_RIC_DATA");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+
+            }
+            break;
+         }
+      case ENTEGTP:
+         {
+            strcpy(sourceTask,"ENTEGTP");
+            switch(pst->event)
+            {
+               case EVTCFGCFM:
+                  {
+                     strcpy(message,"EVTCFGCFM");
+                     break;
+                  }
+               case EVTSRVOPENCFM:
+                  {
+                     strcpy(message,"EVTSRVOPENCFM");
+                     break;
+                  }
+               case EVTTNLMGMTCFM:
+                  {
+                     strcpy(message,"EVTTNLMGMTCFM");
+                     break;
+                  }
+               default:
+                  {
+                     strcpy(message,"Invalid Event");
+                     break;
+                  }
+            }
+            break;
+         }
+      default:
+         {
+            strcpy(sourceTask,"Invalid Source Entity Id");
+            break;
+         }
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 /**************************************************************************
  * @brief Task Activation callback function. 
  *
@@ -126,6 +370,10 @@ uint8_t duActvInit(Ent entity, Inst inst, Region region, Reason reason)
 uint8_t duActvTsk(Pst *pst, Buffer *mBuf)
 {
    uint8_t ret = ROK;
+   
+#ifdef CALL_FLOW_DEBUG_LOG   
+   callFlowduActvTsk(pst);
+#endif
 
    switch(pst->srcEnt)
    {
index 92734a5..96f7ada 100644 (file)
@@ -65,6 +65,44 @@ uint8_t sctpActvInit(Ent entity, Inst inst, Region region, Reason reason)
 
 }
 
+/**************************************************************************
+* @brief Function prints src, dest, msg infor about all the msgs that received.
+*
+* @details
+*
+*     Function : callFlowSctpActvTsk
+*
+*     Function prints src, dest, msg infor about all the msgs that received
+*
+*  @param[in]  Pst     *pst, Post structure of the primitive.
+*
+*  @return  void
+***************************************************************************/
+uint8_t callFlowSctpActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="ENTSCTP";
+   char message[100];
+
+   switch(pst->srcEnt)
+   {
+      case ENTDUAPP:
+         {
+            strcpy(sourceTask,"ENTDUAPP");
+            switch(pst->event)
+            {
+               case EVTSTARTPOLL:
+                  {
+                     strcpy(message,"EVTSTARTPOLL");
+                     break;
+                  }
+            }
+            break;
+         }
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
+
 /**************************************************************************
  * @brief Task Activation callback function. 
  *
@@ -86,6 +124,12 @@ uint8_t sctpActvInit(Ent entity, Inst inst, Region region, Reason reason)
  ***************************************************************************/
 uint8_t sctpActvTsk(Pst *pst, Buffer *mBuf)
 {
+
+#ifdef CALL_FLOW_DEBUG_LOG
+   callFlowSctpActvTsk(pst);
+#endif
+
+
    switch(pst->srcEnt)
    {
       case ENTDUAPP:
@@ -155,6 +199,9 @@ uint8_t duSctpCfgReq(SctpParams sctpCfg)
    uint8_t  ret = ROK;
    CmStatus cfm;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+    DU_LOG("\nCall Flow: ENTDUAPP -> ENTSCTP : EVENT_CFG_REQ_TO_SCTP\n");
+#endif
 /* Fill F1 Params */
    f1Params.destIpAddr.ipV4Pres  = sctpCfg.cuIpAddr.ipV4Pres;
    f1Params.destIpAddr.ipV4Addr  = sctpCfg.cuIpAddr.ipV4Addr;
@@ -339,6 +386,10 @@ uint8_t duSctpAssocReq(uint8_t itfType)
    CmStatus     cfm;
    DuSctpDestCb *paramPtr = NULLP;
 
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTDUAPP -> ENTSCTP : EVENT_ASSOC_REQ_TO_SCTP\n");
+#endif
    DU_ALLOC(paramPtr, sizeof(DuSctpDestCb));
    if(paramPtr == NULLP)
    {
@@ -640,6 +691,12 @@ uint8_t  processPolling(sctpSockPollParams *pollParams, CmInetFd *sockFd, uint32
       }
       else
       {
+#ifdef CALL_FLOW_DEBUG_LOG
+         if(pollParams->port == f1Params.destPort)
+            DU_LOG("\nCall Flow: CU -> ENTSCTP : EVENT_SCTP_MSG\n");
+         else
+            DU_LOG("\nCall Flow: RIC -> ENTSCTP : EVENT_SCTP_MSG\n");
+#endif
          if((((pollParams->flag & CM_INET_SCTP_MSG_NOTIFICATION) != 0)) && ret == ROK)
          {
             if(pollParams->port == f1Params.destPort)
@@ -770,16 +827,33 @@ uint8_t sctpSend(Buffer *mBuf, uint8_t itfType)
    
    memInfo.region = DU_APP_MEM_REGION;               
    memInfo.pool   = DU_POOL;
+   
+#ifdef CALL_FLOW_DEBUG_LOG
+   if(itfType == F1_INTERFACE)
+   {
+      DU_LOG("\nCall Flow: ENTDUAPP -> ENTSCTP : EVENT_F1AP_MSG_TO_SCTP\n");
+   }
+   else
+   {
+      DU_LOG("\nCall Flow: ENTDUAPP -> ENTSCTP : EVENT_E2AP_MSG_TO_SCTP\n");
+   }
+#endif
 
    if(itfType == F1_INTERFACE)
    {
-      DU_LOG("\nDEBUG   -->  SCTP : sending the message to DuApp");
+      DU_LOG("\nDEBUG   -->  SCTP : sending the message to CU");
+#ifdef CALL_FLOW_DEBUG_LOG
+      DU_LOG("\nCall Flow: ENTSCTP -> CU : EVENT_F1AP_MSG_TO_CU\n");
+#endif
       ret = cmInetSctpSendMsg(&f1Params.sockFd, &f1Params.destIpNetAddr, f1Params.destPort, &memInfo, mBuf, &len, 0, FALSE, 0, 0/*SCT_PROTID_NONE*/, RWOULDBLOCK);
    }
 
    if(itfType == E2_INTERFACE)
    {
       DU_LOG("\nDEBUG   -->  SCTP : sending the message to ric");
+#ifdef CALL_FLOW_DEBUG_LOG
+      DU_LOG("\nCall Flow: ENTSCTP -> RIC : EVENT_E2AP_MSG_TO_RIC\n");
+#endif
       ret = cmInetSctpSendMsg(&ricParams.sockFd, &ricParams.destIpNetAddr, ricParams.destPort, &memInfo, mBuf, &len, 0, FALSE, 0, 0/*SCT_PROTID_NONE*/, RWOULDBLOCK);
    }
 
index 870c91e..4974325 100644 (file)
@@ -1151,7 +1151,7 @@ uint8_t BuildPdschCfgCommon(struct BWP_DownlinkCommon__pdsch_ConfigCommon *pdsch
            DU_LOG("\nERROR  -->  DU APP : PDCCH Config memory alloc failed");
            return RFAILED;
         }
-        elementCnt = ODU_VALUE_ONE;
+        elementCnt = duPdschCfg.numTimeDomRsrcAlloc;
         pdschSetup->pdsch_TimeDomainAllocationList->list.count = elementCnt;
         pdschSetup->pdsch_TimeDomainAllocationList->list.size =  elementCnt * sizeof(PDSCH_TimeDomainResourceAllocation_t *);
 
@@ -1174,21 +1174,22 @@ uint8_t BuildPdschCfgCommon(struct BWP_DownlinkCommon__pdsch_ConfigCommon *pdsch
            }
         }
 
-        idx = 0;
-        timeDomRsrcAllocInfo = pdschSetup->pdsch_TimeDomainAllocationList->list.array[idx];
-
-        /* K0 */
-        DU_ALLOC(timeDomRsrcAllocInfo->k0, sizeof(long));
-        if(!timeDomRsrcAllocInfo->k0)
-        {
-           DU_LOG("\nERROR  -->  DU APP : PDCCH Config memory alloc failed");
-           return RFAILED;
-        }
-        *timeDomRsrcAllocInfo->k0 = duPdschCfg.k0;
-
-        timeDomRsrcAllocInfo->mappingType = duPdschCfg.mapType;
-        timeDomRsrcAllocInfo->startSymbolAndLength = duPdschCfg.sliv;
-
+    for(idx = 0; idx < pdschSetup->pdsch_TimeDomainAllocationList->list.count; idx++)
+    {
+       timeDomRsrcAllocInfo = pdschSetup->pdsch_TimeDomainAllocationList->list.array[idx];
+
+       /* K0 */
+       DU_ALLOC(timeDomRsrcAllocInfo->k0, sizeof(long));
+       if(!timeDomRsrcAllocInfo->k0)
+       {
+          DU_LOG("\nERROR  -->  DU APP : PDCCH Config memory alloc failed");
+          return RFAILED;
+       }
+       *timeDomRsrcAllocInfo->k0 = duPdschCfg.timeDomAlloc[idx].k0;
+
+       timeDomRsrcAllocInfo->mappingType = duPdschCfg.timeDomAlloc[idx].mapType;
+       timeDomRsrcAllocInfo->startSymbolAndLength = duPdschCfg.timeDomAlloc[idx].sliv;
+    }
         break;
       }
       default:
@@ -1796,7 +1797,7 @@ uint8_t BuildPuschCfgCommon(struct BWP_UplinkCommon__pusch_ConfigCommon *puschCf
 
    duPuschCfg = duCfgParam.sib1Params.srvCellCfgCommSib.ulCfg.puschCfg;
 
-   puschCfg->present = duPuschCfg.present;
+   puschCfg->present = duPuschCfg.puschCfgPresent;
    switch(puschCfg->present)
    {
       case BWP_UplinkCommon__pusch_ConfigCommon_PR_NOTHING:
@@ -1827,7 +1828,7 @@ uint8_t BuildPuschCfgCommon(struct BWP_UplinkCommon__pusch_ConfigCommon *puschCf
            DU_LOG("\nERROR  -->  DU APP : PUSCH Config memory alloc failed");
            return RFAILED;
         }
-        elementCnt = ODU_VALUE_ONE;
+        elementCnt = duPuschCfg.numTimeDomRsrcAlloc;
         setup->pusch_TimeDomainAllocationList->list.count = elementCnt;
         setup->pusch_TimeDomainAllocationList->list.size = \
         elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
@@ -1851,21 +1852,21 @@ uint8_t BuildPuschCfgCommon(struct BWP_UplinkCommon__pusch_ConfigCommon *puschCf
            }
         }
 
-        idx = 0;
-        timeDomRsrcAllocInfo = setup->pusch_TimeDomainAllocationList->list.array[idx];
-
-        /* K2 */
-        DU_ALLOC(timeDomRsrcAllocInfo->k2, sizeof(long));
-        if(!timeDomRsrcAllocInfo->k2)
-        {
-           DU_LOG("\nERROR  -->  DU APP : PUSCH Config memory alloc failed");
-           return RFAILED;
-        }
-        *timeDomRsrcAllocInfo->k2 = duPuschCfg.k2;
-
-        timeDomRsrcAllocInfo->mappingType = duPuschCfg.mapType;
-        timeDomRsrcAllocInfo->startSymbolAndLength = duPuschCfg.sliv;
-
+        for(idx = 0; idx < elementCnt; idx++)
+    {
+       timeDomRsrcAllocInfo = setup->pusch_TimeDomainAllocationList->list.array[idx];
+
+       /* K2 */
+       DU_ALLOC(timeDomRsrcAllocInfo->k2, sizeof(long));
+       if(!timeDomRsrcAllocInfo->k2)
+       {
+          DU_LOG("\nERROR  -->  DU APP : PUSCH Config memory alloc failed");
+          return RFAILED;
+       }
+       *timeDomRsrcAllocInfo->k2 = duPuschCfg.timeDomAllocList[idx].k2;
+       timeDomRsrcAllocInfo->mappingType = duPuschCfg.timeDomAllocList[idx].mapType;
+       timeDomRsrcAllocInfo->startSymbolAndLength = duPuschCfg.timeDomAllocList[idx].sliv;
+    }
         /* Msg3 Delta Preamble */
         DU_ALLOC(setup->msg3_DeltaPreamble, sizeof(long));
         if(!setup->msg3_DeltaPreamble)
index edca41d..39569c9 100644 (file)
@@ -214,6 +214,11 @@ uint8_t duBuildAndSendDlUserDataToRlc(uint16_t msgLen, EgtpMsg *egtpMsg)
 uint8_t duHdlEgtpDlData(EgtpMsg  *egtpMsg)
 {
    uint16_t msgLen = 0;
+
+#ifdef CALL_FLOW_DEBUG_LOG
+    DU_LOG("\nCall Flow: ENTEGTP -> ENTDUAPP : EVENT_HDL_RECV_DL_DATA\n");
+#endif
+
    DU_LOG("\nDEBUG  --> DU_APP : Processing DL data in duHdlEgtpDlData()");
    
    if(!egtpMsg->msg)
@@ -704,17 +709,25 @@ void fillDefaultInitUlBwp(InitialUlBwp *initUlBwp)
         initUlBwp->puschCfg.dmrsUlCfgForPuschMapTypeA.transPrecodDisabled. \
            scramblingId0 = SCRAMBLING_ID; 
         initUlBwp->puschCfg.resourceAllocType = RESOURCEALLOCATION_TYPE1;
-        initUlBwp->puschCfg.numTimeDomRsrcAlloc = 1;
+        initUlBwp->puschCfg.numTimeDomRsrcAlloc = 2;
         idx = 0;
         if(initUlBwp->puschCfg.numTimeDomRsrcAlloc <= MAX_NUM_UL_ALLOC)
         {
-           initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2;
+           initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2_CFG1;
            initUlBwp->puschCfg.timeDomRsrcAllocList[idx].mappingType =\
               MAPPING_TYPEA;
            initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbol = PUSCH_START_SYMBOL;
            initUlBwp->puschCfg.timeDomRsrcAllocList[idx].symbolLength = PUSCH_LENGTH_SYMBOL;
            initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbolAndLength =\
               calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
+
+       idx++;
+       initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2_CFG2;
+       initUlBwp->puschCfg.timeDomRsrcAllocList[idx].mappingType = MAPPING_TYPEA;
+       initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbol = PUSCH_START_SYMBOL;
+       initUlBwp->puschCfg.timeDomRsrcAllocList[idx].symbolLength = PUSCH_LENGTH_SYMBOL;
+       initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbolAndLength =\
+          calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
         }
         initUlBwp->puschCfg.transformPrecoder = TRANSFORM_PRECODER_DISABLED;
       }
index 4bbdbe1..387326c 100644 (file)
@@ -49,7 +49,50 @@ uint8_t phyStubActvInit(Ent ent, Inst inst, Region reg, Reason reason)
    return ROK;
 }
 
+/**************************************************************************
+* @brief Function prints the src dest and msg reached to egtp.
+*
+* @details
+*
+*      Function : callFlowPhyStubActvTsk 
+*
+*      Functionality:
+*           Function prints the src dest and msg reached to egtp.
+*
+* @param[in]  Pst     *pst, Post structure of the primitive.
+*
+* @return void
+*
+***************************************************************************/
+
+void  callFlowPhyStubActvTsk(Pst *pst)
+{
+   char sourceTask[50];
+   char destTask[50]="PHY";
+   char message[100];
 
+   switch(pst->srcEnt)
+   {
+      case ENTPHYSTUB:
+      {
+         strcpy(sourceTask,"PHY");
+         switch(pst->event)
+         {
+            case EVT_PHY_START_SLOT_IND:
+               {
+                  strcpy(message,"EVT_PHY_START_SLOT_IND");
+                  break;
+               }
+            default:
+               {
+                  strcpy(message,"Invalid Event");
+                  break;
+               }
+         }
+      }
+   }
+   DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
+}
 /*******************************************************************
 *
 * @brief Receives messages for Phy stub slot indication generator task
@@ -69,6 +112,11 @@ uint8_t phyStubActvInit(Ent ent, Inst inst, Region reg, Reason reason)
 uint8_t phyStubActvTsk(Pst *pst, Buffer *mBuf)
 {
    DU_LOG("\nPHY_STUB: Received Event [%d]", pst->event);
+   
+#ifdef CALL_FLOW_DEBUG_LOG   
+   callFlowPhyStubActvTsk(pst);
+#endif
+
    switch(pst->srcEnt)
    {
       case ENTPHYSTUB:
index ae58a57..e9af17c 100644 (file)
@@ -1 +1 @@
-cd odu;make clean_odu MACHINE=BIT64 MODE=TDD;make odu MACHINE=BIT64 MODE=TDD COVERAGE=1
+sudo apt install -y libsctp-dev;cd odu;make clean_odu MACHINE=BIT64 MODE=TDD;make odu MACHINE=BIT64 MODE=TDD COVERAGE=1