#include "lwr_mac_upr_inf.h"
#include "mac.h"
#include "mac_utils.h"
+#include "mac_harq_dl.h"
/* This file contains message handling functionality for MAC */
packMacSchSrUciInd
};
+/* Function pointer for sending DL HARQ Ind from MAC to SCH */
+MacSchDlHarqIndFunc macSchDlHarqIndOpts[]=
+{
+ packMacSchDlHarqInd,
+ MacSchDlHarqInd,
+ packMacSchDlHarqInd
+};
+
/* Function pointer for sending Slice cfg ind from MAC to SCH */
MacSchSliceCfgReqFunc macSchSliceCfgReqOpts[]=
{
};
/* Function pointer for sending Slice cfg ind from MAC to SCH */
-MacSchSliceReCfgReqFunc macSchSliceReCfgReqOpts[]=
+MacSchSliceRecfgReqFunc macSchSliceRecfgReqOpts[]=
{
- packMacSchSliceReCfgReq,
- MacSchSliceReCfgReq,
- packMacSchSliceReCfgReq
+ packMacSchSliceRecfgReq,
+ MacSchSliceRecfgReq,
+ packMacSchSliceRecfgReq
};
/*******************************************************************
*
for(pduIdx = 0; pduIdx < rxDataInd->numPdus; pduIdx++)
{
-
+
GET_CELL_IDX(rxDataInd->cellId, cellIdx);
GET_UE_ID(rxDataInd->pdus[pduIdx].rnti, ueId);
if(macCb.macCell[cellIdx] && macCb.macCell[cellIdx]->ueCb[ueId -1].transmissionAction == STOP_TRANSMISSION)
{
- DU_LOG("\nINFO --> MAC : UL data transmission not allowed for UE %d", macCb.macCell[cellIdx]->ueCb[ueId -1].duUeF1apId);
+ DU_LOG("\nINFO --> MAC : UL data transmission not allowed for UE %d", macCb.macCell[cellIdx]->ueCb[ueId -1].ueId);
}
else
{
currDlSlot->dlInfo.dlMsgAlloc[ueId-1]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.dlMsgPduLen = txPduLen;
currDlSlot->dlInfo.dlMsgAlloc[ueId-1]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.dlMsgPdu = txPdu;
+ /* Add muxed TB to DL HARQ Proc CB. This will be used if retranmission of
+ * TB is requested in future. */
+ updateNewTbInDlHqProcCb(dlData->slotInfo, &macCb.macCell[cellIdx]->ueCb[ueId -1], \
+ currDlSlot->dlInfo.dlMsgAlloc[ueId-1]->dlMsgSchedInfo[schInfoIdx].dlMsgPdschCfg.codeword[0].tbSize, txPdu);
}
for(lcIdx = 0; lcIdx < dlData->numLc; lcIdx++)
* RFAILED - failure
*
* ****************************************************************/
-uint8_t MacProcCellStart(Pst *pst, OduCellId *cellId)
+uint8_t MacProcCellStart(Pst *pst, CellStartInfo *cellStart)
{
DU_LOG("\nINFO --> MAC : Handling cell start request");
gSlotCount = 0;
- sendToLowerMac(START_REQUEST, 0, cellId);
+ sendToLowerMac(START_REQUEST, 0, cellStart);
- MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellId, \
- sizeof(OduCellId));
+ MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellStart, \
+ sizeof(CellStartInfo));
return ROK;
}
* RFAILED - failure
*
* ****************************************************************/
-uint8_t MacProcCellStop(Pst *pst, OduCellId *cellId)
+uint8_t MacProcCellStop(Pst *pst, CellStopInfo *cellStop)
{
#ifdef INTEL_FAPI
uint16_t cellIdx;
DU_LOG("\nINFO --> MAC : Sending cell stop request to Lower Mac");
- GET_CELL_IDX(cellId->cellId, cellIdx);
+ GET_CELL_IDX(cellStop->cellId, cellIdx);
if(macCb.macCell[cellIdx])
{
macCb.macCell[cellIdx]->state = CELL_TO_BE_STOPPED;
}
#endif
- MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellId, \
- sizeof(OduCellId));
+ MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellStop, \
+ sizeof(CellStopInfo));
return ROK;
}
return(*macSchBsrOpts[pst.selector])(&pst, &bsrInd);
}
+/*******************************************************************
+ *
+ * @brief Builds and send DL HARQ Indication to SCH
+ *
+ * @details
+ *
+ * Function : buildAndSendHarqInd
+ *
+ * Functionality:
+ * Builds and send HARQ UCI Indication to SCH
+ *
+ * @params[in] harqInfo Pointer
+ * crnti value
+ * cell Index value
+ * slot Ind Pointer
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t buildAndSendHarqInd(HarqInfoF0F1 *harqInfo, uint8_t crnti, uint16_t cellIdx, SlotTimingInfo *slotInd)
+{
+ uint16_t harqCounter=0;
+ Pst pst;
+ DlHarqInd dlHarqInd;
+ memset(&pst, 0, sizeof(Pst));
+ memset(&dlHarqInd, 0, sizeof(DlHarqInd));
+
+ dlHarqInd.cellId = macCb.macCell[cellIdx]->cellId;
+ dlHarqInd.crnti = crnti;
+ dlHarqInd.slotInd.sfn = slotInd->sfn;
+ dlHarqInd.slotInd.slot = slotInd->slot;
+ dlHarqInd.numHarq = harqInfo->numHarq;
+ memset(dlHarqInd.harqPayload, 0, MAX_SR_BITS_IN_BYTES);
+ for(harqCounter = 0; harqCounter < harqInfo->numHarq; harqCounter++)
+ {
+ dlHarqInd.harqPayload[harqCounter] = harqInfo->harqValue[harqCounter];
+ }
+
+ /* Fill Pst */
+ FILL_PST_MAC_TO_SCH(pst, EVENT_DL_HARQ_IND_TO_SCH);
+
+ return(*macSchDlHarqIndOpts[pst.selector])(&pst, &dlHarqInd);
+}
+
+
/*******************************************************************
*
* @brief Builds and send SR UCI Indication to SCH
uint8_t FapiMacUciInd(Pst *pst, UciInd *macUciInd)
{
uint8_t pduIdx = 0, ret = ROK;
- uint16_t nPdus = 0, crnti = 0;
+ uint16_t nPdus = 0, crnti = 0, cellIdx = 0;
if(macUciInd)
{
case UCI_IND_PUSCH:
break;
case UCI_IND_PUCCH_F0F1:
+ {
+ {
+ DU_LOG("\nDEBUG --> MAC : Received HARQ UCI Indication\n");
+ GET_CELL_IDX(macUciInd->cellId, cellIdx);
+ buildAndSendHarqInd(&macUciInd->pdus[pduIdx].uci.uciPucchF0F1.harqInfo, macUciInd->pdus[pduIdx].uci.uciPucchF0F1.crnti, cellIdx, &macUciInd->slotInd);
+ }
if(macUciInd->pdus[pduIdx].uci.uciPucchF0F1.srInfo.srIndPres)
{
DU_LOG("\nDEBUG --> MAC : Received SR UCI indication");
crnti = macUciInd->pdus[pduIdx].uci.uciPucchF0F1.crnti;
ret = buildAndSendSrInd(macUciInd, crnti);
}
+ }
break;
case UCI_IND_PUCCH_F2F3F4:
break;
*
* @details
*
- * Function : MacProcSliceReCfgReq
+ * Function : MacProcSliceRecfgReq
*
* Functionality:
* Processes Processes Slice ReCfg Request recived from DU
*
* @params[in] Post Structure Pointer
- * MacSliceCfgReq *macSliceReCfgReq;
+ * MacSliceCfgReq *macSliceRecfgReq;
* @return ROK - success
* RFAILED - failure
*
**********************************************************************/
-uint8_t MacProcSliceReCfgReq(Pst *pst, MacSliceCfgReq *macSliceReCfgReq)
+uint8_t MacProcSliceRecfgReq(Pst *pst, MacSliceRecfgReq *macSliceRecfgReq)
{
uint8_t ret = ROK;
Pst schPst;
- SchSliceCfgReq *schSliceReCfgReq;
+ SchSliceRecfgReq *schSliceRecfgReq;
DU_LOG("\nINFO --> MAC : Received Slice ReCfg request from DU APP");
- if(macSliceReCfgReq)
+ if(macSliceRecfgReq)
{
- MAC_ALLOC(schSliceReCfgReq, sizeof(SchSliceCfgReq));
- if(schSliceReCfgReq == NULLP)
+ MAC_ALLOC(schSliceRecfgReq, sizeof(SchSliceRecfgReq));
+ if(schSliceRecfgReq == NULLP)
{
- DU_LOG("\nERROR --> MAC : Memory allocation failed in MacProcSliceReCfgReq");
+ DU_LOG("\nERROR --> MAC : Memory allocation failed in MacProcSliceRecfgReq");
ret = RFAILED;
}
else
{
- if(fillSliceCfgInfo(schSliceReCfgReq, macSliceReCfgReq) == ROK)
+ if(fillSliceCfgInfo(schSliceRecfgReq, macSliceRecfgReq) == ROK)
{
FILL_PST_MAC_TO_SCH(schPst, EVENT_SLICE_RECFG_REQ_TO_SCH);
- ret = (*macSchSliceReCfgReqOpts[schPst.selector])(&schPst, schSliceReCfgReq);
+ ret = (*macSchSliceRecfgReqOpts[schPst.selector])(&schPst, schSliceRecfgReq);
}
}
- freeMacSliceCfgReq(macSliceReCfgReq, pst);
+ freeMacSliceCfgReq(macSliceRecfgReq, pst);
}
else
{
- DU_LOG("\nINFO --> MAC : Received MacSliceCfgReq is NULL");
+ DU_LOG("\nINFO --> MAC : Received MacSliceRecfgReq is NULL");
}
return ret;
}