+ for(idx=0; idx<pdschCfg->choice.setup->pdsch_TimeDomainAllocationList->list.count ; idx++)
+ {
+ if(pdschCfg->choice.setup->pdsch_TimeDomainAllocationList->list.array[idx]!=
+ NULLP)
+ {
+ DU_FREE(pdschCfg->choice.setup->pdsch_TimeDomainAllocationList->list.array[idx],\
+ sizeof(PDSCH_TimeDomainResourceAllocation_t));
+ }
+ }
+ DU_FREE(pdschCfg->choice.setup->pdsch_TimeDomainAllocationList->list.array,\
+ pdschCfg->choice.setup->pdsch_TimeDomainAllocationList->list.size);
+ }
+ DU_FREE(pdschCfg->choice.setup->pdsch_TimeDomainAllocationList,\
+ sizeof(PDSCH_TimeDomainResourceAllocationList_t));
+ }
+ DU_FREE(pdschCfg->choice.setup,
+ sizeof(PDSCH_ConfigCommon_t));
+ }
+ }
+ default:
+ break;
+ }
+ DU_FREE(bwp->pdsch_ConfigCommon,\
+ sizeof(struct BWP_DownlinkCommon__pdsch_ConfigCommon));
+ }
+
+ switch(pdcchCfg->present)
+ {
+ case BWP_DownlinkCommon__pdcch_ConfigCommon_PR_NOTHING:
+ {
+ //TODO
+ break;
+ }
+ case BWP_DownlinkCommon__pdcch_ConfigCommon_PR_release:
+ {
+ //TODO
+ break;
+ }
+ case BWP_DownlinkCommon__pdcch_ConfigCommon_PR_setup:
+ {
+ if(!pdcchCfg->choice.setup)
+ {
+ /* Control Resource Set Zero */
+ if(! pdcchCfg->choice.setup->controlResourceSetZero)
+ {
+ /* Search space zero */
+ if(! pdcchCfg->choice.setup->searchSpaceZero)
+ {
+ /* Common Search Space List */
+ if(! pdcchCfg->choice.setup->commonSearchSpaceList)
+ {
+ if(CommonSerachSpaceListret==ROK)
+ {
+ if(!pdcchCfg->choice.setup->searchSpaceSIB1)
+ {
+ if(!pdcchCfg->choice.setup->pagingSearchSpace)
+ {
+ if(!pdcchCfg->choice.setup->ra_SearchSpace)
+ {
+ DU_FREE(pdcchCfg->choice.setup->ra_SearchSpace,
+ sizeof(SearchSpaceId_t));
+ }
+ DU_FREE( pdcchCfg->choice.setup->pagingSearchSpace,
+ sizeof(SearchSpaceId_t));
+ }
+ DU_FREE( pdcchCfg->choice.setup->searchSpaceSIB1,
+ sizeof(SearchSpaceId_t));
+ }
+ }
+
+ FreeCommonSerachSpaceList(pdcchCfg->choice.setup->commonSearchSpaceList);
+
+ DU_FREE( pdcchCfg->choice.setup->commonSearchSpaceList,\
+ sizeof(struct
+ PDCCH_ConfigCommon__commonSearchSpaceList));
+ }
+ DU_FREE( pdcchCfg->choice.setup->searchSpaceZero,
+ sizeof(SearchSpaceZero_t));
+ }
+ DU_FREE( pdcchCfg->choice.setup->controlResourceSetZero,
+ sizeof(ControlResourceSetZero_t));
+ }
+ DU_FREE(pdcchCfg->choice.setup,
+ sizeof(PDCCH_ConfigCommon_t));
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ DU_FREE(bwp->pdcch_ConfigCommon,sizeof(struct BWP_DownlinkCommon__pdcch_ConfigCommon));
+ }
+}
+/*******************************************************************
+ *
+ * @brief deallocating the memory of BuildSib1Msg
+ *
+ * @details
+ *
+ * Function: FreeUlCfgCommSib
+ *
+ * Functionality deallocating the memory of BuildUlCfgCommSib
+ *
+ * @params[in] : UplinkConfigCommonSIB_t *ulCfg
+ *
+ * @return : void
+ *
+ *******************************************************************/
+void FreeUlCfgCommSib(UplinkConfigCommonSIB_t *ulCfg)
+{
+ uint8_t idx=0;
+ RACH_ConfigCommon_t *setup;
+ BWP_UplinkCommon_t *bwp=&ulCfg->initialUplinkBWP;
+ struct FrequencyInfoUL_SIB__scs_SpecificCarrierList *scsCarrierList;
+ struct BWP_UplinkCommon__rach_ConfigCommon *rachCfg;
+ struct BWP_UplinkCommon__pucch_ConfigCommon *pucchCfg;
+ struct BWP_UplinkCommon__pusch_ConfigCommon *puschCfg;
+ puschCfg=ulCfg->initialUplinkBWP.pusch_ConfigCommon;
+ rachCfg =bwp->rach_ConfigCommon;
+ scsCarrierList = &ulCfg->frequencyInfoUL.scs_SpecificCarrierList;
+
+ if(!scsCarrierList->list.array)
+ {
+ if(!ulCfg->frequencyInfoUL.p_Max)
+ {
+ if(FreqInfoUlret == ROK)
+ {
+ if(!bwp->rach_ConfigCommon)
+ {
+ if(RachCfgCommonret== ROK)
+ {
+ if(!bwp->pusch_ConfigCommon)
+ {
+
+ if(PuschCfgCommonret==ROK)
+ {
+ if(!bwp->pucch_ConfigCommon)
+ {
+ pucchCfg=bwp->pucch_ConfigCommon;
+ switch(pucchCfg->present)
+ {
+ case BWP_UplinkCommon__pucch_ConfigCommon_PR_NOTHING:
+ break;
+ case BWP_UplinkCommon__pucch_ConfigCommon_PR_release:
+ break;
+ case BWP_UplinkCommon__pucch_ConfigCommon_PR_setup:
+ {
+ if(!pucchCfg->choice.setup)
+ {
+
+ if(!pucchCfg->choice.setup->pucch_ResourceCommon)
+ {
+ if(!pucchCfg->choice.setup->p0_nominal)
+ {
+ DU_FREE(pucchCfg->choice.setup->p0_nominal,
+ sizeof(long));
+ }
+ DU_FREE(pucchCfg->choice.setup->pucch_ResourceCommon,
+ sizeof(long));
+ }
+ DU_FREE(pucchCfg->choice.setup,
+ sizeof(PUCCH_ConfigCommon_t));
+ }
+ }
+ default:
+ break;
+ }
+ DU_FREE(bwp->pucch_ConfigCommon,\
+ sizeof(struct BWP_UplinkCommon__pucch_ConfigCommon));
+ }
+ }
+ switch(puschCfg->present)
+ {
+ case BWP_UplinkCommon__pusch_ConfigCommon_PR_NOTHING:
+ break;
+ case BWP_UplinkCommon__pusch_ConfigCommon_PR_release:
+ break;
+ case BWP_UplinkCommon__pusch_ConfigCommon_PR_setup:
+ {
+ if(!puschCfg->choice.setup)
+ {
+
+ if(! puschCfg->choice.setup->pusch_TimeDomainAllocationList)
+ {
+ if(! puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array)
+ {
+ if(!puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array[idx])
+ {
+ if(!puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array[idx]->k2)
+ {
+ if(! puschCfg->choice.setup->msg3_DeltaPreamble)
+ {
+ if(!puschCfg->choice.setup->p0_NominalWithGrant)
+ {
+ DU_FREE(puschCfg->choice.setup->p0_NominalWithGrant,
+ sizeof(long));
+ }
+ DU_FREE(puschCfg->choice.setup->msg3_DeltaPreamble,
+ sizeof(long));
+ }
+ DU_FREE(puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.\
+ array[idx]->k2, sizeof(long));
+ }
+ }
+ for(idx=0;
+ idx<puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.count;
+ idx++)
+ {
+ if(!puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array[idx])
+ {
+ DU_FREE(puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array[idx],\
+ sizeof(PUSCH_TimeDomainResourceAllocation_t));
+ }
+ }
+ DU_FREE(puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.array,\
+ puschCfg->choice.setup->pusch_TimeDomainAllocationList->list.size);
+ }
+ DU_FREE(puschCfg->choice.setup->pusch_TimeDomainAllocationList,\
+ sizeof(PUSCH_TimeDomainResourceAllocationList_t));
+ }
+ DU_FREE(puschCfg->choice.setup,
+ sizeof(PUSCH_ConfigCommon_t));
+ }
+ }
+ default :
+ break;
+ }
+
+ DU_FREE(bwp->pusch_ConfigCommon,\
+ sizeof(struct BWP_UplinkCommon__pusch_ConfigCommon));
+ }
+ }
+ switch(rachCfg->present)
+ {
+ case BWP_UplinkCommon__rach_ConfigCommon_PR_NOTHING:
+ break;
+ case BWP_UplinkCommon__rach_ConfigCommon_PR_release:
+ break;
+ case BWP_UplinkCommon__rach_ConfigCommon_PR_setup:
+ {
+ if(!rachCfg->choice.setup)
+ {
+ setup = rachCfg->choice.setup;
+ if(!setup->totalNumberOfRA_Preambles)
+ {
+ if(!setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB)
+ {
+ if(!setup->rsrp_ThresholdSSB)
+ {
+ if(!setup->msg1_SubcarrierSpacing)
+ {
+ DU_FREE(setup->msg1_SubcarrierSpacing,
+ sizeof(SubcarrierSpacing_t));
+ }
+ DU_FREE(setup->rsrp_ThresholdSSB,
+ sizeof(RSRP_Range_t));
+ }
+ DU_FREE(setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB,\
+ sizeof(struct
+ RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB));
+ }
+ DU_FREE(setup->totalNumberOfRA_Preambles,
+ sizeof(long));
+ }
+
+ DU_FREE(rachCfg->choice.setup,
+ sizeof(RACH_ConfigCommon_t));
+ }
+ }
+ default:
+ break;
+ }
+ DU_FREE(bwp->rach_ConfigCommon,\
+ sizeof(struct BWP_UplinkCommon__rach_ConfigCommon));
+ }
+ }
+ DU_FREE(ulCfg->frequencyInfoUL.p_Max, sizeof(P_Max_t));
+ }
+ for(idx = 0; idx < scsCarrierList->list.count; idx++)
+ {
+ if(!scsCarrierList->list.array[idx])
+ {
+ DU_FREE(scsCarrierList->list.array[idx],
+ sizeof(SCS_SpecificCarrier_t));
+ }
+ }
+ DU_FREE(scsCarrierList->list.array, scsCarrierList->list.size);
+ }
+}
+/*******************************************************************
+ *
+ * @brief : Deallocating memory of SIB1 message
+ *
+ * @details
+ *
+ * Function : FreeServCellCfgCommonSib
+ *
+ * Functionality: Deallocating memory of BuildServCellCfgCommonSib
+ *
+ * @params[in] : ServingCellConfigCommonSIB_t *srvCellCfg
+ * @return : void
+ *
+ *******************************************************************/
+void FreeServCellCfgCommonSib(ServingCellConfigCommonSIB_t *srvCellCfg)
+{
+ BIT_STRING_t *ssbPosInBurst;
+ ssbPosInBurst = &srvCellCfg->ssb_PositionsInBurst.inOneGroup;
+ DownlinkConfigCommonSIB_t *dlCfg=&srvCellCfg->downlinkConfigCommon;
+
+ if(!ssbPosInBurst->buf)
+ {
+ /* Free DL frequency info */
+ if(FreqInfoDlret == ROK)
+ {
+ if(DlCfgCommSibret == ROK)
+ {
+ /* Uplink Config Comm */
+ if(!srvCellCfg->uplinkConfigCommon)
+ {
+ if(UlCfgCommSibret==ROK)
+ {
+ /* TDD UL DL Config Comm */
+ if(!srvCellCfg->tdd_UL_DL_ConfigurationCommon)
+ {
+ DU_FREE(srvCellCfg->tdd_UL_DL_ConfigurationCommon,
+ sizeof(TDD_UL_DL_ConfigCommon_t));
+ }
+ }
+ FreeUlCfgCommSib(srvCellCfg->uplinkConfigCommon);
+ DU_FREE(srvCellCfg->uplinkConfigCommon,
+ sizeof(UplinkConfigCommonSIB_t));
+ }
+ }
+ FreeBwpDlCommon(&dlCfg->initialDownlinkBWP);
+ }
+ FreeFreqInfoDl(&dlCfg->frequencyInfoDL);
+ DU_FREE(ssbPosInBurst->buf, ssbPosInBurst->size * sizeof(uint8_t));
+ }
+}
+/*******************************************************************
+ *
+ * @brief : Deallcating memory of the function BuildSib1Msg
+ *
+ * @details
+ *
+ * Function : FreeSib1Msg
+ *
+ * Functionality: Deallcating memory of the function BuildSib1Msg
+ *
+ * @params[in] ServingCellConfigCommonSIB_t pointer
+ * @return void
+ *
+ *******************************************************************/
+void FreeSib1Msg(SIB1_t *sib1Msg)
+{
+ uint8_t idx=0;
+ uint8_t idx1=0;
+ uint8_t idx2=0;
+ CellIdentity_t *cellIdentity = NULLP;
+ CellAccessRelatedInfo_t *cellAccessInfo ;
+ struct PLMN_IdentityInfo__plmn_IdentityList *plmnIdInfo;
+
+
+ if(sib1Msg != NULLP)
+ {
+ cellAccessInfo = &sib1Msg->cellAccessRelatedInfo;
+ if(cellAccessInfo->plmn_IdentityList.list.array !=NULLP)
+ {
+ if(cellAccessInfo->plmn_IdentityList.list.array[idx]!=NULLP)
+ {
+ plmnIdInfo =
+ &cellAccessInfo->plmn_IdentityList.list.array[idx]->plmn_IdentityList;
+
+ if(plmnIdInfo->list.array !=NULLP)
+ {
+ if(!plmnIdInfo->list.array[idx])
+ {
+ if(!plmnIdInfo->list.array[idx]->mcc)
+ {
+ if(!(plmnIdInfo->list.array[idx]->mcc->list.array))
+ {
+ if(!plmnIdInfo->list.array[idx]->mnc.list.array)
+ {
+ /*Free Tracking Area Code */
+ if(!cellAccessInfo->plmn_IdentityList.list.array[idx]->trackingAreaCode)
+ {
+ /*Free RANAC */
+ if(!cellAccessInfo->plmn_IdentityList.list.array[idx]->trackingAreaCode->buf)
+ {
+ /* Free CellIdentity */
+ if(!cellAccessInfo->plmn_IdentityList.list.array[idx]->ranac)
+ {
+ cellIdentity
+ =&cellAccessInfo->plmn_IdentityList.\
+ list.array[idx]->cellIdentity;
+ if(!cellIdentity->buf)
+ {
+ /*Free Connection Establish Failure Control */
+ if(!sib1Msg->connEstFailureControl)
+ {
+ /*Free Serving Cell Config Common */
+ if(!sib1Msg->si_SchedulingInfo)
+ {
+ /* Free Serving Cell Config Common* */
+ if(!sib1Msg->servingCellConfigCommon)
+ {
+ /*Free BuildServCellCfgCommonSib*/
+ FreeServCellCfgCommonSib(\
+ sib1Msg->servingCellConfigCommon);
+
+ DU_FREE(sib1Msg->servingCellConfigCommon,
+ sizeof(ServingCellConfigCommonSIB_t));
+ }
+
+ DU_FREE(sib1Msg->si_SchedulingInfo,
+ sizeof(SI_SchedulingInfo_t));
+ }
+
+ DU_FREE(sib1Msg->connEstFailureControl,
+ sizeof(ConnEstFailureControl_t));
+ }
+ DU_FREE(cellIdentity->buf,cellIdentity->size);
+
+ }
+ DU_FREE(cellAccessInfo->plmn_IdentityList.list.array[idx]->ranac, sizeof(RAN_AreaCode_t));
+
+ }
+ DU_FREE(cellAccessInfo->plmn_IdentityList.list.array[idx]->trackingAreaCode->buf,\
+ cellAccessInfo->plmn_IdentityList.list.array[idx]->trackingAreaCode->size);
+
+ }
+ DU_FREE(cellAccessInfo->plmn_IdentityList.list.array[idx]->trackingAreaCode\
+ , sizeof(TrackingAreaCode_t));
+ }
+
+ for(idx2=0; idx2<plmnIdInfo->list.array[idx1]->mnc.list.count; idx2++)
+ {
+ if(!plmnIdInfo->list.array[idx2]->mnc.list.array[idx2])
+ {
+ DU_FREE(plmnIdInfo->list.array[idx2]->mnc.list.array[idx2],
+ sizeof(MCC_MNC_Digit_t));
+ }
+ }
+ DU_FREE(plmnIdInfo->list.array[idx]->mnc.list.array,
+ plmnIdInfo->list.array[idx1]->mnc.list.size);
+ }
+
+ for(idx1=0; idx1<plmnIdInfo->list.array[idx]->mcc->list.count; idx1++)
+ {
+ if(plmnIdInfo->list.array[idx]->mcc->list.array[idx1]!=NULLP)
+ {
+ DU_FREE(plmnIdInfo->list.array[idx]->mcc->list.array[idx1],\
+ sizeof(MCC_MNC_Digit_t));
+ }
+
+ }
+ DU_FREE(plmnIdInfo->list.array[idx]->mcc->list.array,\
+ plmnIdInfo->list.array[idx]->mcc->list.size)
+ }
+ DU_FREE(plmnIdInfo->list.array[idx]->mcc,sizeof(MCC_t));
+ }
+ }
+ for(idx1=0; idx1<plmnIdInfo->list.count; idx1++)
+ {
+ if(!(plmnIdInfo->list.array[idx1]))
+ {
+ DU_FREE(plmnIdInfo->list.array[idx1],
+ sizeof(PLMN_IdentitY_t));
+ }
+ }
+ DU_FREE(plmnIdInfo->list.array, plmnIdInfo->list.size);
+ }
+ }
+ for(idx=0; idx<cellAccessInfo->plmn_IdentityList.list.count; idx++)
+ {
+ if(cellAccessInfo->plmn_IdentityList.list.array[idx]!=NULLP)
+ {
+ DU_FREE(cellAccessInfo->plmn_IdentityList.list.array[idx],
+ sizeof(PLMN_IdentityInfo_t));
+ }
+ }
+ DU_FREE(cellAccessInfo->plmn_IdentityList.list.array,
+ cellAccessInfo->plmn_IdentityList.list.size);
+ }
+ DU_FREE(sib1Msg, sizeof(SIB1_t));
+ }