X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2F5gnrmac%2Flwr_mac_fsm.c;h=2e92246e132a68f022c1422b4c2362c03c0af3ff;hb=85008fef60069af4d70a447e76aaae64ce836292;hp=88e8a656c0df8c9446ec636690bd54624694d51f;hpb=b8044fce6d8a277254f235d128c8729ed0b5e7b0;p=o-du%2Fl2.git diff --git a/src/5gnrmac/lwr_mac_fsm.c b/src/5gnrmac/lwr_mac_fsm.c index 88e8a656c..2e92246e1 100644 --- a/src/5gnrmac/lwr_mac_fsm.c +++ b/src/5gnrmac/lwr_mac_fsm.c @@ -69,6 +69,7 @@ #define PDSCH_PDU_TYPE 1 #define SSB_PDU_TYPE 3 #define PRACH_PDU_TYPE 0 +#define PUSCH_PDU_TYPE 1 #define PDU_PRESENT 1 #define SET_MSG_LEN(x, size) x += size @@ -3397,9 +3398,15 @@ uint8_t getnPdus(fapi_ul_tti_req_t *ulTtiReq, MacUlSlot *currUlSlot) if(ulTtiReq) ulTtiReq->rachPresent = PDU_PRESENT; } - if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH_UCI) - { - pduCount++; + if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH) + { + pduCount++; + if(ulTtiReq) + ulTtiReq->nUlsch++; + } + if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH_UCI) + { + pduCount++; if(ulTtiReq) ulTtiReq->nUlsch = PDU_PRESENT; } @@ -3487,6 +3494,67 @@ void fillPrachPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg, Ma sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_prach_pdu_t))); } } + +void fillPuschPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg, MacUlSlot *currUlSlot, uint32_t *msgLen) +{ + if(ulTtiReqPdu != NULLP) + { + ulTtiReqPdu->pduType = PUSCH_PDU_TYPE; + ulTtiReqPdu->u.pusch_pdu.pduBitMap = 1; + ulTtiReqPdu->u.pusch_pdu.rnti = currUlSlot->ulCellInfo.crnti; + /* TODO : Fill handle in raCb when scheduling pusch and access here */ + ulTtiReqPdu->u.pusch_pdu.handle = 100; + ulTtiReqPdu->u.pusch_pdu.bwpSize = macCellCfg->initialUlBwp.bwp.numPrb; + ulTtiReqPdu->u.pusch_pdu.bwpStart = macCellCfg->initialUlBwp.bwp.firstPrb; + ulTtiReqPdu->u.pusch_pdu.subCarrierSpacing = \ + macCellCfg->initialUlBwp.bwp.scs; + ulTtiReqPdu->u.pusch_pdu.cyclicPrefix = \ + macCellCfg->initialUlBwp.bwp.cyclicPrefix; + ulTtiReqPdu->u.pusch_pdu.targetCodeRate = 308; + ulTtiReqPdu->u.pusch_pdu.qamModOrder = 2; + ulTtiReqPdu->u.pusch_pdu.mcsIndex = \ + currUlSlot->ulCellInfo.schPuschInfo.tbInfo.mcs; + ulTtiReqPdu->u.pusch_pdu.mcsTable = 0; + ulTtiReqPdu->u.pusch_pdu.transformPrecoding = 1; + ulTtiReqPdu->u.pusch_pdu.dataScramblingId = currUlSlot->ulCellInfo.cellId; + ulTtiReqPdu->u.pusch_pdu.nrOfLayers = 1; + ulTtiReqPdu->u.pusch_pdu.ulDmrsSymbPos = 4; + ulTtiReqPdu->u.pusch_pdu.dmrsConfigType = 0; + ulTtiReqPdu->u.pusch_pdu.ulDmrsScramblingId = currUlSlot->ulCellInfo.cellId; + ulTtiReqPdu->u.pusch_pdu.scid = 0; + ulTtiReqPdu->u.pusch_pdu.numDmrsCdmGrpsNoData = 1; + ulTtiReqPdu->u.pusch_pdu.dmrsPorts = 0; + ulTtiReqPdu->u.pusch_pdu.resourceAlloc = \ + currUlSlot->ulCellInfo.schPuschInfo.resAllocType; + ulTtiReqPdu->u.pusch_pdu.rbStart = \ + currUlSlot->ulCellInfo.schPuschInfo.fdAlloc.startPrb; + ulTtiReqPdu->u.pusch_pdu.rbSize = \ + currUlSlot->ulCellInfo.schPuschInfo.fdAlloc.numPrb; + ulTtiReqPdu->u.pusch_pdu.vrbToPrbMapping = 0; + ulTtiReqPdu->u.pusch_pdu.frequencyHopping = 0; + ulTtiReqPdu->u.pusch_pdu.txDirectCurrentLocation = 0; + ulTtiReqPdu->u.pusch_pdu.uplinkFrequencyShift7p5khz = 0; + ulTtiReqPdu->u.pusch_pdu.startSymbIndex = \ + currUlSlot->ulCellInfo.schPuschInfo.tdAlloc.startSymb; + ulTtiReqPdu->u.pusch_pdu.nrOfSymbols = \ + currUlSlot->ulCellInfo.schPuschInfo.tdAlloc.numSymb; + ulTtiReqPdu->u.pusch_pdu.puschData.rvIndex = \ + currUlSlot->ulCellInfo.schPuschInfo.tbInfo.rv; + ulTtiReqPdu->u.pusch_pdu.puschData.harqProcessId = \ + currUlSlot->ulCellInfo.schPuschInfo.harqProcId; + ulTtiReqPdu->u.pusch_pdu.puschData.newDataIndicator = \ + currUlSlot->ulCellInfo.schPuschInfo.tbInfo.ndi; + ulTtiReqPdu->u.pusch_pdu.puschData.tbSize = \ + currUlSlot->ulCellInfo.schPuschInfo.tbInfo.tbSize; + /* numCb is 0 for new transmission */ + ulTtiReqPdu->u.pusch_pdu.puschData.numCb = 0; + + ulTtiReqPdu->pduSize = sizeof(fapi_ul_pusch_pdu_t); + + SET_MSG_LEN(*msgLen, (sizeof(ulTtiReqPdu->pduType) + \ + sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_pusch_pdu_t))); + } +} #endif /******************************************************************* @@ -3534,6 +3602,7 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo) if(ulTtiReq != NULLP) { + memset(ulTtiReq, 0, msgSize); ulTtiReq->sfn = currTimingInfo->sfn; ulTtiReq->slot = currTimingInfo->slot; ulTtiReq->nPdus = getnPdus(ulTtiReq, currUlSlot); @@ -3543,17 +3612,28 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo) ulTtiReq->pdus = (fapi_ul_tti_req_pdu_t *)(ulTtiReq + \ (sizeof(fapi_ul_tti_req_t) - sizeof(fapi_ul_tti_req_pdu_t*))); /* Fill Prach Pdu */ - if(ulTtiReq->rachPresent) + if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PRACH) { pduIdx++; fillPrachPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen); + } + + /* Fill PUSCH PDU */ + if(currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH) + { + pduIdx++; + fillPuschPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen); + } + if((currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PRACH) || \ + (currUlSlot->ulCellInfo.dataType & SCH_DATATYPE_PUSCH)) + { msgLen += (sizeof(fapi_ul_tti_req_t) - sizeof(fapi_msg_t)); fillMsgHeader(&ulTtiReq->header, FAPI_UL_TTI_REQUEST, msgLen); DU_LOG("\nLWR_MAC: Sending UL TTI Request"); LwrMacSendToPhy(ulTtiReq->header.message_type_id, msgSize, (void *)ulTtiReq); - } + } } else { @@ -3563,11 +3643,13 @@ uint16_t handleUlTtiReq(CmLteTimingInfo *currTimingInfo) DU_LOG("\nLWR_MAC: Sending UL TTI Request"); LwrMacSendToPhy(ulTtiReq->header.message_type_id, msgSize, (void *)ulTtiReq); } + memset(&currUlSlot, 0, sizeof(MacUlSlot)); return ROK; } else { DU_LOG("\nLWR_MAC: Failed to allocate memory for UL TTI Request"); + memset(&currUlSlot, 0, sizeof(MacUlSlot)); return RFAILED; } }