+/**
+ * @brief Layer Manager Configuration request handler.
+ *
+ * @details
+ *
+ * Function : MacSchCellCfgReq
+ *
+ * This function sends cell configuration to SCH
+ *
+ * @param[in] Pst *pst
+ * @param[in] MacCellCfg *macCellCfg
+ * @return S16
+ * -# ROK
+ **/
+int MacSchCellCfgReq
+(
+ Pst *pst,
+ MacCellCfg *macCellCfg
+)
+{
+ SchCellCfg schCellCfg;
+ Pst cfgPst;
+ int ret;
+
+ cmMemset((U8 *)&cfgPst, 0, sizeof(Pst));
+ schCellCfg.cellId = macCellCfg->cellId;
+ schCellCfg.phyCellId = macCellCfg->phyCellId;
+ schCellCfg.bandwidth = macCellCfg->dlCarrCfg.bw;
+ schCellCfg.dupMode = macCellCfg->dupType;
+
+ /* fill ssb scheduler parameters */
+ schCellCfg.ssbSchCfg.ssbPbchPwr = macCellCfg->ssbCfg.ssbPbchPwr;
+ schCellCfg.ssbSchCfg.scsCommon = macCellCfg->ssbCfg.scsCmn;
+ schCellCfg.ssbSchCfg.ssbOffsetPointA = macCellCfg->ssbCfg.ssbOffsetPointA;
+ schCellCfg.ssbSchCfg.ssbPeriod = macCellCfg->ssbCfg.ssbPeriod;
+ schCellCfg.ssbSchCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset;
+ for(uint8_t idx=0; idx<SSB_MASK_SIZE; idx++)
+ {
+ schCellCfg.ssbSchCfg.nSSBMask[idx] = macCellCfg->ssbCfg.ssbMask[idx];
+ }
+
+ /* fill SIB1 scheduler parameters */
+ schCellCfg.sib1SchCfg.sib1PduLen = macCellCfg->sib1Cfg.sib1PduLen;
+ schCellCfg.sib1SchCfg.sib1NewTxPeriod = macCellCfg->sib1Cfg.sib1NewTxPeriod;
+ schCellCfg.sib1SchCfg.sib1RepetitionPeriod = macCellCfg->sib1Cfg.sib1RepetitionPeriod;
+ schCellCfg.sib1SchCfg.coresetZeroIndex = macCellCfg->sib1Cfg.coresetZeroIndex;
+ schCellCfg.sib1SchCfg.searchSpaceZeroIndex = macCellCfg->sib1Cfg.searchSpaceZeroIndex;
+ schCellCfg.sib1SchCfg.sib1Mcs = macCellCfg->sib1Cfg.sib1Mcs;
+
+ /* fill RACH config params */
+ schCellCfg.schRachCfg.prachCfgIdx = macCellCfg->prachCfg.prachCfgIdx;
+ schCellCfg.schRachCfg.prachSubcSpacing = \
+ macCellCfg->prachCfg.prachSubcSpacing;
+ schCellCfg.schRachCfg.msg1FreqStart = macCellCfg->prachCfg.msg1FreqStart;
+ schCellCfg.schRachCfg.msg1Fdm = macCellCfg->prachCfg.msg1Fdm;
+ schCellCfg.schRachCfg.rootSeqLen = macCellCfg->prachCfg.rootSeqLen;
+ schCellCfg.schRachCfg.rootSeqIdx = macCellCfg->prachCfg.fdm[0].rootSeqIdx;
+ schCellCfg.schRachCfg.numRootSeq = macCellCfg->prachCfg.fdm[0].numRootSeq;
+ schCellCfg.schRachCfg.k1 = macCellCfg->prachCfg.fdm[0].k1;
+ schCellCfg.schRachCfg.ssbPerRach = macCellCfg->prachCfg.ssbPerRach;
+ schCellCfg.schRachCfg.prachMultCarrBand = \
+ macCellCfg->prachCfg.prachMultCarrBand;
+ schCellCfg.schRachCfg.raContResTmr = macCellCfg->prachCfg.raContResTmr;
+ schCellCfg.schRachCfg.rsrpThreshSsb = macCellCfg->prachCfg.rsrpThreshSsb;
+ schCellCfg.schRachCfg.raRspWindow = macCellCfg->prachCfg.raRspWindow;
+
+ /* fill initial DL BWP */
+ schCellCfg.schInitialDlBwp.bwp.freqAlloc.startPrb = macCellCfg->initialDlBwp.bwp.firstPrb;
+ schCellCfg.schInitialDlBwp.bwp.freqAlloc.numPrb = macCellCfg->initialDlBwp.bwp.numPrb;
+ schCellCfg.schInitialDlBwp.bwp.scs = macCellCfg->initialDlBwp.bwp.scs;
+ schCellCfg.schInitialDlBwp.bwp.cyclicPrefix = macCellCfg->initialDlBwp.bwp.cyclicPrefix;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.coresetId =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.coresetId;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.duration =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.duration;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1 =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2 =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4 =
+ macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4;
+ schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8 =
+ 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;
+
+ /* 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;
+
+
+ cfgPst.srcProcId = pst->dstProcId;
+ cfgPst.dstProcId = pst->srcProcId;
+ cfgPst.srcEnt = ENTRG;
+ cfgPst.srcInst = 0;
+ cfgPst.dstEnt = ENTRG;
+ cfgPst.dstInst = 1;
+ cfgPst.selector = MAC_SCH_TC_SELECTOR;
+ cfgPst.event = EVENT_SCH_CELL_CFG;
+
+ ret = (*SchCellCfgOpts[cfgPst.selector])(&cfgPst, &schCellCfg);
+ return ret;
+} /* end of MacSchCellCfgReq */
+
+
+/*******************************************************************
+ *
+ * @brief Sends Cell config confirm to DU APP
+ *
+ * @details
+ *
+ * Function : MacSendCellCfgCfm
+ *
+ * Functionality:
+ * Sends Cell config confirm to DU APP
+ *
+ * @params[in] Response status
+ * @return void
+ *
+ * ****************************************************************/
+void MacSendCellCfgCfm(uint8_t response)
+{
+ Pst pst;
+ RgCellCb *cellCb;
+ MacCellCfgCfm macCellCfgCfm;
+
+ cmMemset((U8 *)&pst, 0, sizeof(Pst));
+ cellCb = rgCb[macCb.macInst].cell;
+
+ macCellCfgCfm.transId = cellCb->macCellCfg.transId;
+ macCellCfgCfm.rsp = response;
+
+ memcpy((void *)&pst, (void *)&rgCb[macCb.macInst].rgInit.lmPst, sizeof(Pst));
+ pst.event = EVENT_MAC_CELL_CONFIG_CFM;
+ (*packMacCellCfmOpts[pst.selector])(&pst,&macCellCfgCfm);
+}
+
+
+/**
+ * @brief Layer Manager Configuration response handler.
+ *
+ * @details
+ *
+ * Function : MacProcSchCellCfgCfm
+ *
+ * This function processes cell configuration to SCH
+ *
+ * @param[in] Pst *pst
+ * @param[in] SchCellCfgCfm *schCellCfgCfm
+ * @return int
+ * -# ROK
+ **/
+int MacProcSchCellCfgCfm
+(
+ Pst *pst,
+ SchCellCfgCfm *schCellCfgCfm
+)
+{
+ if(schCellCfgCfm->rsp == RSP_OK)
+ {
+ sendToLowerMac(CONFIG_REQUEST, 0, (void *)NULL);
+ }
+ else
+ {
+ MacSendCellCfgCfm(RSP_NOK);
+ }
+ return ROK;
+}
+