From fec9ccb05a6f0d91127bc51eef34efbba795ec02 Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Tue, 11 May 2021 15:52:47 +0530 Subject: [PATCH] Fixes for SIB1 transmission in Radio Mode [Issue-ID: ODUHIGH-325] Change-Id: I12b61d4e2de132ccbae338368a441ffc560a234a Signed-off-by: lal.harshita --- build/odu/makefile | 3 + src/5gnrmac/lwr_mac_fsm.c | 174 +++++++++++++++++++++------------------ src/5gnrmac/lwr_mac_handle_phy.c | 7 +- src/5gnrsch/sch.c | 9 +- src/5gnrsch/sch.h | 4 +- src/5gnrsch/sch_utils.c | 3 +- src/cm/mac_sch_interface.h | 2 + 7 files changed, 112 insertions(+), 90 deletions(-) diff --git a/build/odu/makefile b/build/odu/makefile index 9652f5d35..072009364 100644 --- a/build/odu/makefile +++ b/build/odu/makefile @@ -86,6 +86,9 @@ ifeq ($(PHY), INTEL_L1) PLTFRM_FLAGS+=-DSS_USE_WLS_MEM -DINTEL_WLS_MEM -DDEBUG_MODE ifeq ($(PHY_MODE),TIMER) PLTFRM_FLAGS+=-DINTEL_TIMER_MODE +else + #TODO: Remove below flag for testing RACH.indication onward + PLTFRM_FLAGS+=-DTEMP_INTG_FLAG endif endif diff --git a/src/5gnrmac/lwr_mac_fsm.c b/src/5gnrmac/lwr_mac_fsm.c index 164f0388e..4fea61623 100644 --- a/src/5gnrmac/lwr_mac_fsm.c +++ b/src/5gnrmac/lwr_mac_fsm.c @@ -52,8 +52,8 @@ LwrMacCb lwrMacCb; uint8_t UnrestrictedSetNcsTable[MAX_ZERO_CORR_CFG_IDX]; void fapiMacConfigRsp(uint16_t cellId); -uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_api_queue_elem_t headerElem); -uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t headerElem); +uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_api_queue_elem_t prevElem); +uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t prevElem); void lwrMacLayerInit(Region region, Pool pool) { @@ -3162,37 +3162,45 @@ uint8_t calcTxDataReqPduCount(DlSchedInfo *dlInfo) * @return ROK * * ********************************************************************/ -uint8_t fillSib1TxDataReq(fapi_tx_pdu_desc_t *pduDesc,MacCellCfg *macCellCfg, - uint16_t pduIndex) +uint8_t fillSib1TxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, MacCellCfg *macCellCfg, + PdschCfg pdschCfg) { - uint32_t pduLen = 0; - uint8_t *sib1TxdataValue = NULLP; + uint16_t payloadSize = 0; + uint8_t *sib1Payload = NULLP; + fapi_api_queue_elem_t *payloadElem = NULLP; +#ifdef INTEL_WLS_MEM + void * wlsHdlr = NULLP; +#endif pduDesc[pduIndex].pdu_index = pduIndex; pduDesc[pduIndex].num_tlvs = 1; /* fill the TLV */ - /* as of now, memory is allocated from SSI, later WLS memory needs to be taken */ + payloadSize = pdschCfg.codeword[0].tbSize; pduDesc[pduIndex].tlvs[0].tl.tag = FAPI_TX_DATA_PTR_TO_PAYLOAD_64; - pduDesc[pduIndex].tlvs[0].tl.length = macCellCfg->sib1Cfg.sib1PduLen; - LWR_MAC_ALLOC(sib1TxdataValue,macCellCfg->sib1Cfg.sib1PduLen); - if(sib1TxdataValue == NULLP) + pduDesc[pduIndex].tlvs[0].tl.length = payloadSize; + LWR_MAC_ALLOC(sib1Payload, payloadSize); + if(sib1Payload == NULLP) { return RFAILED; } - memcpy(sib1TxdataValue,macCellCfg->sib1Cfg.sib1Pdu, - macCellCfg->sib1Cfg.sib1PduLen); - pduDesc[pduIndex].tlvs[0].value = sib1TxdataValue; + payloadElem = (fapi_api_queue_elem_t *)sib1Payload; + FILL_FAPI_LIST_ELEM(payloadElem, NULLP, FAPI_VENDOR_MSG_PHY_ZBC_BLOCK_REQ, 1, \ + macCellCfg->sib1Cfg.sib1PduLen); + memcpy(sib1Payload + TX_PAYLOAD_HDR_LEN, macCellCfg->sib1Cfg.sib1Pdu, macCellCfg->sib1Cfg.sib1PduLen); - /* The total length of the PDU description and PDU data */ - pduLen += 8; /* size of PDU length 2 bytes, PDU index 2 bytes, numTLV 4 bytes */ - pduLen += sizeof(fapi_uint8_ptr_tlv_t); /* only 1 TLV is present */ - pduDesc[pduIndex].pdu_length = pduLen; +#ifdef INTEL_WLS_MEM + mtGetWlsHdl(&wlsHdlr); + pduDesc[pduIndex].tlvs[0].value = WLS_VA2PA(wlsHdlr, sib1Payload); +#else + pduDesc[pduIndex].tlvs[0].value = sib1Payload; +#endif + pduDesc[pduIndex].pdu_length = payloadSize; #ifdef INTEL_WLS_MEM - addWlsBlockToFree(sib1TxdataValue, macCellCfg->sib1Cfg.sib1PduLen, (lwrMacCb.phySlotIndCntr-1)); + addWlsBlockToFree(sib1Payload, payloadSize, (lwrMacCb.phySlotIndCntr-1)); #else - LWR_MAC_FREE(sib1TxdataValue, macCellCfg->sib1Cfg.sib1PduLen); + LWR_MAC_FREE(sib1Payload, payloadSize); #endif return ROK; @@ -3216,41 +3224,44 @@ uint8_t fillSib1TxDataReq(fapi_tx_pdu_desc_t *pduDesc,MacCellCfg *macCellCfg, * @return ROK * * ********************************************************************/ -uint8_t fillRarTxDataReq(fapi_tx_pdu_desc_t *pduDesc, RarInfo *rarInfo, - uint16_t pduIndex) +uint8_t fillRarTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, RarInfo *rarInfo, PdschCfg pdschCfg) { - uint32_t pduLen = 0; - uint8_t *rarTxdataValue = NULLP; + uint16_t payloadSize; + uint8_t *rarPayload = NULLP; + fapi_api_queue_elem_t *payloadElem = NULLP; +#ifdef INTEL_WLS_MEM + void * wlsHdlr = NULLP; +#endif pduDesc[pduIndex].pdu_index = pduIndex; pduDesc[pduIndex].num_tlvs = 1; /* fill the TLV */ - /* as of now, memory is allocated from SSI, later WLS memory needs to be taken */ + payloadSize = pdschCfg.codeword[0].tbSize; pduDesc[pduIndex].tlvs[0].tl.tag = FAPI_TX_DATA_PTR_TO_PAYLOAD_64; - pduDesc[pduIndex].tlvs[0].tl.length = rarInfo->rarPduLen; - LWR_MAC_ALLOC(rarTxdataValue,rarInfo->rarPduLen); - if(rarTxdataValue == NULLP) + pduDesc[pduIndex].tlvs[0].tl.length = payloadSize; + LWR_MAC_ALLOC(rarPayload, payloadSize); + if(rarPayload == NULLP) { return RFAILED; } - memcpy(rarTxdataValue,rarInfo->rarPdu,rarInfo->rarPduLen); - pduDesc[pduIndex].tlvs[0].value = rarTxdataValue; - - /* The total length of the PDU description and PDU data */ - pduLen += 8; /* size of PDU length 2 bytes, PDU index 2 bytes, numTLV 4 bytes */ - pduLen += sizeof(fapi_uint8_ptr_tlv_t); /* only 1 TLV is present */ - pduDesc[pduIndex].pdu_length = pduLen; + payloadElem = (fapi_api_queue_elem_t *)rarPayload; + FILL_FAPI_LIST_ELEM(payloadElem, NULLP, FAPI_VENDOR_MSG_PHY_ZBC_BLOCK_REQ, 1, rarInfo->rarPduLen); + memcpy(rarPayload + TX_PAYLOAD_HDR_LEN, rarInfo->rarPdu, rarInfo->rarPduLen); - /* TODO: The pointer value which was stored, needs to be free-ed at PHY * - * But since we did not implement WLS, this has to be done here - */ -#ifdef INTEL_WLS_MEM - addWlsBlockToFree(rarTxdataValue, rarInfo->rarPduLen, (lwrMacCb.phySlotIndCntr-1)); +#ifdef INTEL_WLS_MEM + mtGetWlsHdl(&wlsHdlr); + pduDesc[pduIndex].tlvs[0].value = WLS_VA2PA(wlsHdlr, rarPayload); #else - LWR_MAC_FREE(rarTxdataValue, rarInfo->rarPduLen); + pduDesc[pduIndex].tlvs[0].value = rarPayload; #endif + pduDesc[pduIndex].pdu_length = payloadSize; +#ifdef INTEL_WLS_MEM + addWlsBlockToFree(rarPayload, payloadSize, (lwrMacCb.phySlotIndCntr-1)); +#else + LWR_MAC_FREE(rarPayload, payloadSize); +#endif return ROK; } @@ -3272,46 +3283,49 @@ uint8_t fillRarTxDataReq(fapi_tx_pdu_desc_t *pduDesc, RarInfo *rarInfo, * @return ROK * * ********************************************************************/ -uint8_t fillDlMsgTxDataReq(fapi_tx_pdu_desc_t *pduDesc, DlMsgInfo *dlMsgInfo, - uint16_t pduIndex) +uint8_t fillDlMsgTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlMsgInfo *dlMsgInfo, PdschCfg pdschCfg) { - uint32_t pduLen = 0; - uint8_t *dedMsgTxDataValue = NULLP; + uint16_t payloadSize; + uint8_t *dlMsgPayload = NULLP; + fapi_api_queue_elem_t *payloadElem = NULLP; +#ifdef INTEL_WLS_MEM + void * wlsHdlr = NULLP; +#endif pduDesc[pduIndex].pdu_index = pduIndex; pduDesc[pduIndex].num_tlvs = 1; /* fill the TLV */ - /* as of now, memory is allocated from SSI, later WLS memory needs to be taken */ + payloadSize = pdschCfg.codeword[0].tbSize; pduDesc[pduIndex].tlvs[0].tl.tag = FAPI_TX_DATA_PTR_TO_PAYLOAD_64; - pduDesc[pduIndex].tlvs[0].tl.length = dlMsgInfo->dlMsgPduLen; - LWR_MAC_ALLOC(dedMsgTxDataValue, dlMsgInfo->dlMsgPduLen); - if(dedMsgTxDataValue == NULLP) + pduDesc[pduIndex].tlvs[0].tl.length = payloadSize; + LWR_MAC_ALLOC(dlMsgPayload, payloadSize); + if(dlMsgPayload == NULLP) { return RFAILED; } - memcpy(dedMsgTxDataValue, dlMsgInfo->dlMsgPdu, dlMsgInfo->dlMsgPduLen); - pduDesc[pduIndex].tlvs[0].value = dedMsgTxDataValue; + payloadElem = (fapi_api_queue_elem_t *)dlMsgPayload; + FILL_FAPI_LIST_ELEM(payloadElem, NULLP, FAPI_VENDOR_MSG_PHY_ZBC_BLOCK_REQ, 1, dlMsgInfo->dlMsgPduLen); + memcpy(dlMsgPayload + TX_PAYLOAD_HDR_LEN, dlMsgInfo->dlMsgPdu, dlMsgInfo->dlMsgPduLen); - /* The total length of the PDU description and PDU data */ - pduLen += 8; /* size of PDU length 2 bytes, PDU index 2 bytes, numTLV 4 bytes */ - pduLen += sizeof(fapi_uint8_ptr_tlv_t); /* only 1 TLV is present */ - pduDesc[pduIndex].pdu_length = pduLen; - - /* TODO: The pointer value which was stored, needs to be free-ed at PHY * - * But since we did not implement WLS, this has to be done here - */ -#ifdef INTEL_WLS_MEM - addWlsBlockToFree(dedMsgTxDataValue, dlMsgInfo->dlMsgPduLen, (lwrMacCb.phySlotIndCntr-1)); +#ifdef INTEL_WLS_MEM + mtGetWlsHdl(&wlsHdlr); + pduDesc[pduIndex].tlvs[0].value = WLS_VA2PA(wlsHdlr, dlMsgPayload); #else - LWR_MAC_FREE(dedMsgTxDataValue, dlMsgInfo->dlMsgPduLen); + pduDesc[pduIndex].tlvs[0].value = dlMsgPayload; #endif + pduDesc[pduIndex].pdu_length = payloadSize; +#ifdef INTEL_WLS_MEM + addWlsBlockToFree(dlMsgPayload, payloadSize, (lwrMacCb.phySlotIndCntr-1)); +#else + LWR_MAC_FREE(dlMsgPayload, payloadSize); +#endif return ROK; } - #endif /* FAPI */ + /******************************************************************* * * @brief Sends DL TTI Request to PHY @@ -3487,9 +3501,11 @@ uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo) DU_LOG("\nDEBUG --> LWR_MAC: Sending DL TTI Request"); #endif /* Intel L1 expects UL_TTI.request following DL_TTI.request */ - fillUlTtiReq(currTimingInfo, headerElem); + msgHeader->num_msg++; + fillUlTtiReq(currTimingInfo, dlTtiElem); /* send Tx-DATA req message */ - sendTxDataReq(dlTtiReqTimingInfo, &currDlSlot->dlInfo, headerElem); + msgHeader->num_msg++; + sendTxDataReq(dlTtiReqTimingInfo, &currDlSlot->dlInfo, dlTtiElem->p_next); LwrMacSendToL1(headerElem); } else @@ -3499,7 +3515,8 @@ uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo) #endif /* Intel L1 expects UL_TTI.request following DL_TTI.request */ - fillUlTtiReq(currTimingInfo, headerElem); + msgHeader->num_msg++; + fillUlTtiReq(currTimingInfo, dlTtiElem); LwrMacSendToL1(headerElem); } memset(currDlSlot, 0, sizeof(MacDlSlot)); @@ -3537,14 +3554,13 @@ uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo) * RFAILED - failure * * ****************************************************************/ -uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_api_queue_elem_t headerElem) +uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_api_queue_elem_t prevElem) { #ifdef INTEL_FAPI uint8_t nPdu = 0; uint16_t cellIdx; uint16_t pduIndex = 0; fapi_tx_data_req_t *txDataReq =NULLP; - fapi_msg_header_t *msgHeader =NULLP; p_fapi_api_queue_elem_t txDataElem = 0; GET_CELL_IDX(currTimingInfo.cellId, cellIdx); @@ -3570,14 +3586,15 @@ uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_a txDataReq->slot = currTimingInfo.slot; if(dlInfo->brdcstAlloc.sib1Trans) { - fillSib1TxDataReq(txDataReq->pdu_desc, - &macCb.macCell[cellIdx]->macCellCfg, pduIndex); + fillSib1TxDataReq(txDataReq->pdu_desc, pduIndex, &macCb.macCell[cellIdx]->macCellCfg, \ + dlInfo->brdcstAlloc.sib1Alloc.sib1PdschCfg); pduIndex++; txDataReq->num_pdus++; } if(dlInfo->rarAlloc != NULLP) { - fillRarTxDataReq(txDataReq->pdu_desc, &dlInfo->rarAlloc->rarInfo, pduIndex); + fillRarTxDataReq(txDataReq->pdu_desc, pduIndex, &dlInfo->rarAlloc->rarInfo,\ + dlInfo->rarAlloc->rarPdschCfg); pduIndex++; txDataReq->num_pdus++; @@ -3586,8 +3603,8 @@ uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_a } if(dlInfo->dlMsgAlloc != NULLP) { - fillDlMsgTxDataReq(txDataReq->pdu_desc, \ - &dlInfo->dlMsgAlloc->dlMsgInfo, pduIndex); + fillDlMsgTxDataReq(txDataReq->pdu_desc, pduIndex, &dlInfo->dlMsgAlloc->dlMsgInfo,\ + dlInfo->dlMsgAlloc->dlMsgPdschCfg); pduIndex++; txDataReq->num_pdus++; @@ -3600,9 +3617,7 @@ uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo, p_fapi_a /* Fill message header */ DU_LOG("\nDEBUG --> LWR_MAC: Sending TX DATA Request"); - msgHeader = (fapi_msg_header_t *)(headerElem + 1); - msgHeader->num_msg++; - headerElem->p_next->p_next->p_next = txDataElem; + prevElem->p_next = txDataElem; } #endif return ROK; @@ -3888,7 +3903,7 @@ void fillPucchPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg,\ * RFAILED - failure * ******************************************************************/ -uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t headerElem) +uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t prevElem) { #ifdef INTEL_FAPI uint16_t cellIdx =0; @@ -3897,7 +3912,6 @@ uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t header MacUlSlot *currUlSlot = NULLP; MacCellCfg macCellCfg; fapi_ul_tti_req_t *ulTtiReq = NULLP; - fapi_msg_header_t *msgHeader = NULLP; p_fapi_api_queue_elem_t ulTtiElem; if(lwrMacCb.phyState == PHY_STATE_RUNNING) @@ -3947,11 +3961,7 @@ uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo, p_fapi_api_queue_elem_t header #ifdef ODU_SLOT_IND_DEBUG_LOG DU_LOG("\nDEBUG --> LWR_MAC: Sending UL TTI Request"); #endif - - /* Fill message header */ - msgHeader = (fapi_msg_header_t *)(headerElem + 1); - msgHeader->num_msg++; - headerElem->p_next->p_next = ulTtiElem; + prevElem->p_next = ulTtiElem; memset(currUlSlot, 0, sizeof(MacUlSlot)); return ROK; diff --git a/src/5gnrmac/lwr_mac_handle_phy.c b/src/5gnrmac/lwr_mac_handle_phy.c index 54a664395..ebcd761ff 100644 --- a/src/5gnrmac/lwr_mac_handle_phy.c +++ b/src/5gnrmac/lwr_mac_handle_phy.c @@ -180,6 +180,9 @@ uint8_t procStopInd() * ****************************************************************/ uint8_t procRachInd(fapi_rach_indication_t *fapiRachInd) { +/* TODO : Remove the following #ifndef TEMP_INTG_FLAG, when testing + * RACH.indication in radio mode integration */ +#ifndef TEMP_INTG_FLAG Pst pst; uint8_t pduIdx; uint8_t prmbleIdx; @@ -217,7 +220,9 @@ uint8_t procRachInd(fapi_rach_indication_t *fapiRachInd) /* Fill post and sent to MAC */ FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_RACH_IND_TO_MAC); return (*sendRachIndOpts[pst.selector])(&pst, rachInd); - +#else + return ROK; +#endif }/* handleRachInd */ /******************************************************************* diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index 5de50fd26..89c347365 100644 --- a/src/5gnrsch/sch.c +++ b/src/5gnrsch/sch.c @@ -719,7 +719,7 @@ void fillSchSib1Cfg(uint8_t mu, uint8_t bandwidth, uint8_t numSlots, SchSib1Cfg uint8_t slotIndex = 0; uint8_t FreqDomainResource[6] = {0}; uint16_t tbSize = 0; - uint8_t numPdschSymbols = 12; /* considering pdsch region from 2 to 13 */ + uint8_t numPdschSymbols = 11; /* considering pdsch region from symbols 3 to 13 */ uint8_t ssbIdx = 0; PdcchCfg *pdcch = &(sib1SchCfg->sib1PdcchCfg); @@ -814,14 +814,14 @@ void fillSchSib1Cfg(uint8_t mu, uint8_t bandwidth, uint8_t numSlots, SchSib1Cfg pdsch->codeword[cwCount].mcsIndex = sib1SchCfg->sib1Mcs; pdsch->codeword[cwCount].mcsTable = 0; /* notqam256 */ pdsch->codeword[cwCount].rvIndex = 0; - tbSize = schCalcTbSize(sib1SchCfg->sib1PduLen); + tbSize = schCalcTbSize(sib1SchCfg->sib1PduLen + TX_PAYLOAD_HDR_LEN); pdsch->codeword[cwCount].tbSize = tbSize; } pdsch->dataScramblingId = pci; pdsch->numLayers = 1; pdsch->transmissionScheme = 0; pdsch->refPoint = 0; - pdsch->dmrs.dlDmrsSymbPos = 2; + pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ pdsch->dmrs.dmrsConfigType = 0; /* type-1 */ pdsch->dmrs.dlDmrsScramblingId = pci; pdsch->dmrs.scid = 0; @@ -837,7 +837,8 @@ void fillSchSib1Cfg(uint8_t mu, uint8_t bandwidth, uint8_t numSlots, SchSib1Cfg pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize,sib1SchCfg->sib1Mcs,numPdschSymbols); pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */ pdsch->pdschTimeAlloc.rowIndex = 1; - pdsch->pdschTimeAlloc.timeAlloc.startSymb = 2; /* spec-38.214, Table 5.1.2.1-1 */ + /* This is Intel's requirement. PDSCH should start after PDSCH DRMS symbol */ + pdsch->pdschTimeAlloc.timeAlloc.startSymb = 3; /* spec-38.214, Table 5.1.2.1-1 */ pdsch->pdschTimeAlloc.timeAlloc.numSymb = numPdschSymbols; pdsch->beamPdschInfo.numPrgs = 1; pdsch->beamPdschInfo.prgSize = 1; diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 4ca3bc636..9bfc6edf3 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -46,8 +46,8 @@ #define SI_RNTI 0xFFFF #define P_RNTI 0xFFFE #define DMRS_MAP_TYPE_A 1 -#define NUM_DMRS_SYMBOLS 12 -#define DMRS_ADDITIONAL_POS 2 +#define NUM_DMRS_SYMBOLS 1 +#define DMRS_ADDITIONAL_POS 0 #define SCH_DEFAULT_K1 1 #define SCH_TQ_SIZE 10 diff --git a/src/5gnrsch/sch_utils.c b/src/5gnrsch/sch_utils.c index 4cb93c66f..9c14e9010 100644 --- a/src/5gnrsch/sch_utils.c +++ b/src/5gnrsch/sch_utils.c @@ -535,6 +535,7 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols) uint8_t qm = mcsTable[mcs][1]; uint16_t rValue = mcsTable[mcs][2]; uint8_t numLayer = 1; /* v value */ + uint8_t numDmrsRePerPrb = 12; tbSize = tbSize * 8; //Calculate tbSize in bits @@ -545,7 +546,7 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols) nre = ceil( (float)tbSize * 1024 / (qm * rValue * numLayer)); - nreDash = ceil( (12 * numSymbols) - NUM_DMRS_SYMBOLS - 0); + nreDash = ceil( (12 * numSymbols) - numDmrsRePerPrb - 0); if (nreDash > 156) nre = 156; diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 285d2000d..599b6389e 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -92,6 +92,8 @@ #define MAX_NUM_DL_DATA_TO_UL_ACK 15 #define SD_SIZE 3 +#define TX_PAYLOAD_HDR_LEN 32 /* Intel L1 requires adding a 32 byte header to transmitted payload */ + #define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \ { \ if ((crntTime.slot + incr) > (MAX_SLOTS - 1)) \ -- 2.16.6