+ sfn = cell->slotInfo.sfn;
+ slot = cell->slotInfo.slot;
+ ulAlloc = cell->ulAlloc[cell->slotInfo.slot];
+ prachCfgIdx = cell->cellCfg.schRachCfg.prachCfgIdx;
+
+ /* derive the prachCfgIdx table paramters */
+ x = prachCfgIdxTable[prachCfgIdx][1];
+ y = prachCfgIdxTable[prachCfgIdx][2];
+ prachSubframe = prachCfgIdxTable[prachCfgIdx][3];
+
+ if((sfn%x) != y)
+ {
+ /* prach occasion does not lie in this SFN */
+ DU_LOG("\nPRACH ocassion doesn't lie in this SFN");
+ return RFAILED;
+ }
+ /* check for subFrame number */
+ if ((1 << slot) & prachSubframe)
+ {
+ /* prach ocassion present in this subframe */
+
+ prachFormat = prachCfgIdxTable[prachCfgIdx][0];
+ prachStartSymbol = prachCfgIdxTable[prachCfgIdx][4];
+ prachOcas = prachCfgIdxTable[prachCfgIdx][6];
+
+ /* freq domain resource determination for RACH*/
+ freqStart = cell->cellCfg.schRachCfg.msg1FreqStart;
+ /* numRa determined as 𝑛 belonging {0,1,.., M − 1},
+ * where M is given by msg1Fdm */
+ numRa = (cell->cellCfg.schRachCfg.msg1Fdm - 1);
+ for(idx=0; idx<MAX_RACH_NUM_RB_IDX; idx++)
+ {
+ if(numRbForPrachTable[idx][0] == cell->cellCfg.schRachCfg.rootSeqIdx)
+ break;
+ }
+ numPrachRb = numRbForPrachTable[idx][3];
+ /* Considering first slot in the frame for PRACH */
+ idx = 0;
+ ulAlloc->assignedPrb[idx] = freqStart+numPrachRb;
+ }
+
+ /* Fill UL SCH Info */
+ ulSchInfo->cellId = cell->cellId;
+ ulSchInfo->slotIndInfo.sfn = sfn;
+ ulSchInfo->slotIndInfo.slot = slot;
+ ulSchInfo->dataType = dataType | SCH_DATATYPE_PRACH;
+ /* prach info */
+ ulSchInfo->prachSchInfo.numPrachOcas = prachOcas;
+ ulSchInfo->prachSchInfo.prachFormat = prachFormat;
+ ulSchInfo->prachSchInfo.numRa = numRa;
+ ulSchInfo->prachSchInfo.prachStartSymb = prachStartSymbol;
+
+ return ROK;
+}
+
+/**
+ * @brief resource allocation for UL
+ *
+ * @details
+ *
+ * Function : schUlResAlloc
+ *
+ * This function handles UL Resource allocation
+ *
+ * @param[in] SchCellCb *cell, cellCb
+ * @return void
+ **/
+int schUlResAlloc(SchCellCb *cell, Inst schInst)
+{
+ int ret = ROK;
+ UlSchInfo ulSchInfo;
+ /* Schedule resources for PRACH */
+ schPrachResAlloc(cell, &ulSchInfo);
+ //send msg to MAC
+ ret = sendUlSchInfoToMac(&ulSchInfo, schInst);
+ if(ret != ROK)
+ {
+ DU_LOG("\nSending UL Sch info from SCH to MAC failed");
+ }
+
+ return ret;
+}