- 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);
- }
-}
+ uint8_t idx = 0;
+ PUSCH_ConfigCommon_t *setup = NULLP;
+ PUSCH_TimeDomainResourceAllocation_t *timeDomRsrcAllocInfo = NULLP;
+
+ if(puschCfg->choice.setup)
+ {
+ setup = puschCfg->choice.setup;
+
+ /* Time Domain Resource Allocation List */
+ if(setup->pusch_TimeDomainAllocationList)
+ {
+ if(setup->pusch_TimeDomainAllocationList->list.array)
+ {
+ for(idx=0; idx < setup->pusch_TimeDomainAllocationList->list.count; idx++)
+ {
+ if(setup->pusch_TimeDomainAllocationList->list.array[idx])
+ {
+ timeDomRsrcAllocInfo = setup->pusch_TimeDomainAllocationList->list.array[idx];
+
+ /* K2 */
+ DU_FREE(timeDomRsrcAllocInfo->k2, sizeof(long));
+ DU_FREE(setup->pusch_TimeDomainAllocationList->list.array[idx],\
+ sizeof(PUSCH_TimeDomainResourceAllocation_t));
+ }
+ }
+ DU_FREE(setup->pusch_TimeDomainAllocationList->list.array, setup->pusch_TimeDomainAllocationList->list.size);
+ }
+ DU_FREE(setup->pusch_TimeDomainAllocationList, sizeof(PUSCH_TimeDomainResourceAllocationList_t));
+ }
+
+ /* Msg3 Delta Preamble */
+ DU_FREE(setup->msg3_DeltaPreamble, sizeof(long));
+
+ /* P0 Nominal with grant */
+ DU_FREE(setup->p0_NominalWithGrant, sizeof(long));
+
+ DU_FREE(puschCfg->choice.setup, sizeof(PUSCH_ConfigCommon_t));
+ }
+}/* BuildPuschCfgCommon */
+
+/*******************************************************************
+ *
+ * @brief Free RACH configuration common
+ *
+ * @details
+ *
+ * Function : FreeRachCfgCommon
+ *
+ * Functionality:
+ * Free RACH configuration common
+ *
+ * @params[in] BWP_UplinkCommon__rach_ConfigCommon pointer
+ * @return void
+ *
+ * ****************************************************************/
+
+void FreeRachCfgCommon(struct BWP_UplinkCommon__rach_ConfigCommon *rachCfg)
+{
+ RACH_ConfigCommon_t *setup = NULLP;
+
+ if(rachCfg->choice.setup)
+ {
+ setup = rachCfg->choice.setup;
+
+ /* Total number of RA preambles */
+ DU_FREE(setup->totalNumberOfRA_Preambles, sizeof(long));
+
+ /* SSB per RACH occassion and CB Preambles per SSB */
+ DU_FREE(setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB,\
+ sizeof(struct RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB));
+
+ /* RSRP Threshold SSB */
+ DU_FREE(setup->rsrp_ThresholdSSB, sizeof(RSRP_Range_t));
+
+ /* Msg 1 Subcarrier spacing */
+ DU_FREE(setup->msg1_SubcarrierSpacing, sizeof(SubcarrierSpacing_t));
+
+ DU_FREE(rachCfg->choice.setup, sizeof(RACH_ConfigCommon_t));
+ }
+}/* FreeRachCfgCommon */
+
+/*******************************************************************
+ *
+ * @brief Free UL BWP Common
+ *
+ * @details
+ *
+ * Function : FreeBwpUlCommon
+ *
+ * Functionality:
+ * Free UL BWP Common
+ *
+ * @params[in] BWP_UplinkCommon_t pointer
+ * @return void
+ *
+ * ****************************************************************/
+void FreeBwpUlCommon(BWP_UplinkCommon_t *bwp)
+{
+ /* RACH Config Common */
+ if(bwp->rach_ConfigCommon)
+ {
+ FreeRachCfgCommon(bwp->rach_ConfigCommon);
+ DU_FREE(bwp->rach_ConfigCommon, sizeof(struct BWP_UplinkCommon__rach_ConfigCommon));
+ }
+
+ /* PUSCH Config Common */
+ if(bwp->pusch_ConfigCommon)
+ {
+ FreePuschCfgCommon(bwp->pusch_ConfigCommon);
+ DU_FREE(bwp->pusch_ConfigCommon, sizeof(struct BWP_UplinkCommon__pusch_ConfigCommon));
+ }
+
+ /* PUCCH Config Common */
+ if(bwp->pucch_ConfigCommon)
+ {
+ FreePucchCfgCommon(bwp->pucch_ConfigCommon);
+ DU_FREE(bwp->pucch_ConfigCommon, sizeof(struct BWP_UplinkCommon__pucch_ConfigCommon));
+ }
+}/* FreeBwpUlCommon */
+
+/*******************************************************************
+ *
+ * @brief Free frequency infor for UL
+ *
+ * @details
+ *
+ * Function : FreeFreqInfoUlSib
+ *
+ * Functionality:
+ * Free frequency infor for UL
+ *
+ * @params[in] FrequencyInfoUL_SIB_t pointer
+ * @return void
+ *
+ * ****************************************************************/
+
+void FreeFreqInfoUlSib(FrequencyInfoUL_SIB_t *frequencyInfoUL)
+{
+ uint8_t idx = 0;
+ struct FrequencyInfoUL_SIB__scs_SpecificCarrierList *scsCarrierList = &frequencyInfoUL->scs_SpecificCarrierList;
+
+ /* Subcarrier Spacing specifc carrier */
+ if(scsCarrierList->list.array)
+ {
+ for(idx = 0; idx < scsCarrierList->list.count; idx++)
+ {
+ DU_FREE(scsCarrierList->list.array[idx], sizeof(SCS_SpecificCarrier_t));
+ }
+ DU_FREE(scsCarrierList->list.array, scsCarrierList->list.size);
+ }
+
+ /* P-MAX */
+ DU_FREE(frequencyInfoUL->p_Max, sizeof(P_Max_t));
+}/* FreeFreqInfoUlSib */
+