#include "du_app_mac_inf.h"
#include "mac_sch_interface.h"
#include "sch.h"
+#include "sch_utils.h"
extern SchCb schCb[SCH_MAX_INST];
+extern uint16_t prachCfgIdxTable[MAX_PRACH_CONFIG_IDX][8];
+extern uint16_t numRbForPrachTable[MAX_RACH_NUM_RB_IDX][5];
+
+SchMacUlSchInfoFunc schMacUlSchInfoOpts[] =
+{
+ packSchMacUlSchInfo,
+ MacProcUlSchInfo,
+ packSchMacUlSchInfo
+};
/**
* @brief Time domain allocation for SSB
DU_LOG("\nSCS %d is currently not supported", scs);
}
}
+
/**
* @brief common resource allocation for SSB
*
return ROK;
}
+/*******************************************************************
+ *
+ * @brief Handles sending UL scheduler info to MAC
+ *
+ * @details
+ *
+ * Function : sendUlSchInfoToMac
+ *
+ * Functionality:
+ * Sends UL Sch info to MAC from SCH
+ *
+ * @params[in]
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+int sendUlSchInfoToMac(UlSchInfo *ulSchInfo, Inst inst)
+{
+ Pst pst;
+
+ memset(&pst, 0, sizeof(Pst));
+ SCH_FILL_RSP_PST(pst, inst);
+ pst.event = EVENT_UL_SCH_INFO;
+
+ return(*schMacUlSchInfoOpts[pst.selector])(&pst, ulSchInfo);
+
+}
+/**
+ * @brief resource allocation for PRACH
+ *
+ * @details
+ *
+ * Function : schPrachResAlloc
+ *
+ * This function handles PRACH allocation
+ *
+ * @param[in] SchCellCb *cell, cell cb
+ * @param[in] UlSchInfo *ulSchInfo, UL scheduling info
+ * @return void
+ **/
+int schPrachResAlloc(SchCellCb *cell, UlSchInfo *ulSchInfo)
+{
+ uint8_t numPrachRb;
+ uint8_t numRa;
+ uint8_t freqStart;
+ uint16_t sfn;
+ uint16_t slot;
+ uint8_t prachCfgIdx = 0;
+ uint8_t prachFormat = 0;
+ uint8_t x = 0;
+ uint8_t y = 0;
+ uint8_t prachSubframe = 0;
+ uint8_t prachStartSymbol = 0;
+ uint8_t prachOcas = 0;
+ uint8_t dataType = 0;
+ uint8_t idx = 0;
+ SchUlAlloc *ulAlloc = NULLP;
+ 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;
+}
/**********************************************************************
End of file
**********************************************************************/