*******************************************************************************/
/* header include files -- defines (.h) */
+#include <stdbool.h>
#include "envopt.h" /* environment options */
#include "envdep.h" /* environment dependent */
#include "envind.h" /* environment independent */
extern MacCb macCb;
extern void sendToLowerMac(uint16_t msgType, uint32_t msgLen, void *msg);
+uint16_t buildMacPdu(RlcMacData *dlData);
/* Function pointer for sending crc ind from MAC to SCH */
MacSchCrcIndFunc macSchCrcIndOpts[]=
packMacSchCrcInd
};
+/* Function pointer for sending DL RLC BO Info from MAC to SCH */
+MacSchDlRlcBoInfoFunc macSchDlRlcBoInfoOpts[]=
+{
+ packMacSchDlRlcBoInfo,
+ macSchDlRlcBoInfo,
+ packMacSchDlRlcBoInfo
+};
+
+/*******************************************************************
+ *
+ * @brief Sends DL BO Info to SCH
+ *
+ * @details
+ *
+ * Function : sendDlRlcBoInfoMacToSch
+ *
+ * Functionality:
+ * Sends DL BO Info to SCH
+ *
+ * @params[in]
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ ****************************************************************/
+int sendDlRlcBoInfoMacToSch(DlRlcBOInfo *dlBoInfo)
+{
+ Pst pst;
+
+ fillMacToSchPst(&pst);
+ pst.event = EVENT_DL_RLC_BO_INFO_TO_SCH;
+
+ return(*macSchDlRlcBoInfoOpts[pst.selector])(&pst, dlBoInfo);
+}
+
/*******************************************************************
*
* @brief Sends CRC Indication to SCH
uint16_t pduIdx;
DU_LOG("\nMAC : Received Rx Data indication");
+
+ /* TODO : compare the handle received in RxDataInd with handle send in PUSCH
+ * PDU, which is stored in raCb */
+
for(pduIdx = 0; pduIdx < rxDataInd->numPdus; pduIdx++)
{
- unpackRxData(rxDataInd->timingInfo, &rxDataInd->pdus[pduIdx]);
+ unpackRxData(&rxDataInd->pdus[pduIdx]);
}
return ROK;
}
* ****************************************************************/
uint16_t MacHdlDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo)
{
+ uint16_t idx;
+ DlRlcBOInfo dlBoInfo;
+ memset(&dlBoInfo, 0, sizeof(DlRlcBOInfo));
+
DU_LOG("\nMAC : Handling DL CCCH IND");
+
+ /* TODO : Fill DL RLC Buffer status info */
+ dlBoInfo.cellId = dlCcchIndInfo->cellId;
+ dlBoInfo.crnti = dlCcchIndInfo->crnti;
+ dlBoInfo.numLc = 0;
+
+ if(dlCcchIndInfo->msgType == RRC_SETUP)
+ {
+ dlBoInfo.boInfo[dlBoInfo.numLc].lcId = SRB_ID_0; // SRB ID 0 for msg4
+ dlBoInfo.boInfo[SRB_ID_0].dataVolume = \
+ dlCcchIndInfo->dlCcchMsgLen;
+ dlBoInfo.numLc++;
- MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo->dlCcchMsg, strlen((const char*)dlCcchIndInfo->dlCcchMsg));
- MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo, sizeof(DlCcchIndInfo));
+ /* storing Msg4 Pdu in raCb */
+ if(macCb.macCell->macRaCb[0].crnti == dlCcchIndInfo->crnti)
+ {
+ macCb.macCell->macRaCb[0].msg4PduLen = dlCcchIndInfo->dlCcchMsgLen;
+ MAC_ALLOC(macCb.macCell->macRaCb[0].msg4Pdu, macCb.macCell->macRaCb[0]\
+ .msg4PduLen);
+ if(macCb.macCell->macRaCb[0].msg4Pdu)
+ {
+ for(idx = 0; idx < dlCcchIndInfo->dlCcchMsgLen; idx++)
+ {
+ macCb.macCell->macRaCb[0].msg4Pdu[idx] =\
+ dlCcchIndInfo->dlCcchMsg[idx];
+ }
+ }
+ }
+ }
+ sendDlRlcBoInfoMacToSch(&dlBoInfo);
+
+ MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo->dlCcchMsg, \
+ dlCcchIndInfo->dlCcchMsgLen);
+ MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo, sizeof(DlCcchIndInfo));
return ROK;
}
return ret;
}
-
-
+/*******************************************************************
+ *
+ * @brief Handles Ue Create Request from DU APP
+ *
+ * @details
+ *
+ * Function : MacHdlUeCreateReq
+ *
+ * Functionality:
+ * Handles Ue create Request from DU APP
+ *
+ * @params[in] Post structure pointer
+ * MacUeCfg pointer
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t MacHdlUeCreateReq(Pst *pst, MacUeCfg *ueCfg)
+{
+ /* TODO : Create MAC UE Context.
+ Copy Tx Pdu from raCb
+ Delete RaCb
+ Send MacUeContext to SCH */
+ MAC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(MacUeCfg));
+ return ROK;
+}
/**********************************************************************
End of file