Change-Id: I12b61d4e2de132ccbae338368a441ffc560a234a
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
PLTFRM_FLAGS+=-DSS_USE_WLS_MEM -DINTEL_WLS_MEM -DDEBUG_MODE
ifeq ($(PHY_MODE),TIMER)
PLTFRM_FLAGS+=-DINTEL_TIMER_MODE
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
uint8_t UnrestrictedSetNcsTable[MAX_ZERO_CORR_CFG_IDX];
void fapiMacConfigRsp(uint16_t cellId);
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)
{
void lwrMacLayerInit(Region region, Pool pool)
{
* @return ROK
*
* ********************************************************************/
* @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 */
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.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)
- 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;
- addWlsBlockToFree(sib1TxdataValue, macCellCfg->sib1Cfg.sib1PduLen, (lwrMacCb.phySlotIndCntr-1));
+ addWlsBlockToFree(sib1Payload, payloadSize, (lwrMacCb.phySlotIndCntr-1));
- LWR_MAC_FREE(sib1TxdataValue, macCellCfg->sib1Cfg.sib1PduLen);
+ LWR_MAC_FREE(sib1Payload, payloadSize);
* @return ROK
*
* ********************************************************************/
* @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 */
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.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)
- 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);
- LWR_MAC_FREE(rarTxdataValue, rarInfo->rarPduLen);
+ pduDesc[pduIndex].tlvs[0].value = rarPayload;
+ pduDesc[pduIndex].pdu_length = payloadSize;
+#ifdef INTEL_WLS_MEM
+ addWlsBlockToFree(rarPayload, payloadSize, (lwrMacCb.phySlotIndCntr-1));
+#else
+ LWR_MAC_FREE(rarPayload, payloadSize);
+#endif
* @return ROK
*
* ********************************************************************/
* @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 */
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.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)
- 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);
- LWR_MAC_FREE(dedMsgTxDataValue, dlMsgInfo->dlMsgPduLen);
+ pduDesc[pduIndex].tlvs[0].value = dlMsgPayload;
+ pduDesc[pduIndex].pdu_length = payloadSize;
+#ifdef INTEL_WLS_MEM
+ addWlsBlockToFree(dlMsgPayload, payloadSize, (lwrMacCb.phySlotIndCntr-1));
+#else
+ LWR_MAC_FREE(dlMsgPayload, payloadSize);
+#endif
/*******************************************************************
*
* @brief Sends DL TTI Request to PHY
/*******************************************************************
*
* @brief Sends DL TTI Request to PHY
DU_LOG("\nDEBUG --> LWR_MAC: Sending DL TTI Request");
#endif
/* Intel L1 expects UL_TTI.request following DL_TTI.request */
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 */
/* send Tx-DATA req message */
- sendTxDataReq(dlTtiReqTimingInfo, &currDlSlot->dlInfo, headerElem);
+ msgHeader->num_msg++;
+ sendTxDataReq(dlTtiReqTimingInfo, &currDlSlot->dlInfo, dlTtiElem->p_next);
LwrMacSendToL1(headerElem);
}
else
LwrMacSendToL1(headerElem);
}
else
#endif
/* Intel L1 expects UL_TTI.request following DL_TTI.request */
#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));
LwrMacSendToL1(headerElem);
}
memset(currDlSlot, 0, sizeof(MacDlSlot));
* RFAILED - failure
*
* ****************************************************************/
* 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;
{
#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);
p_fapi_api_queue_elem_t txDataElem = 0;
GET_CELL_IDX(currTimingInfo.cellId, cellIdx);
txDataReq->slot = currTimingInfo.slot;
if(dlInfo->brdcstAlloc.sib1Trans)
{
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)
{
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++;
pduIndex++;
txDataReq->num_pdus++;
}
if(dlInfo->dlMsgAlloc != NULLP)
{
}
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++;
pduIndex++;
txDataReq->num_pdus++;
/* Fill message header */
DU_LOG("\nDEBUG --> LWR_MAC: Sending TX DATA Request");
/* 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;
* RFAILED - failure
*
******************************************************************/
* 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;
{
#ifdef INTEL_FAPI
uint16_t cellIdx =0;
MacUlSlot *currUlSlot = NULLP;
MacCellCfg macCellCfg;
fapi_ul_tti_req_t *ulTtiReq = NULLP;
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)
p_fapi_api_queue_elem_t ulTtiElem;
if(lwrMacCb.phyState == PHY_STATE_RUNNING)
#ifdef ODU_SLOT_IND_DEBUG_LOG
DU_LOG("\nDEBUG --> LWR_MAC: Sending UL TTI Request");
#endif
#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;
memset(currUlSlot, 0, sizeof(MacUlSlot));
return ROK;
* ****************************************************************/
uint8_t procRachInd(fapi_rach_indication_t *fapiRachInd)
{
* ****************************************************************/
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;
Pst pst;
uint8_t pduIdx;
uint8_t prmbleIdx;
/* Fill post and sent to MAC */
FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_RACH_IND_TO_MAC);
return (*sendRachIndOpts[pst.selector])(&pst, rachInd);
/* 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 */
/*******************************************************************
}/* handleRachInd */
/*******************************************************************
uint8_t slotIndex = 0;
uint8_t FreqDomainResource[6] = {0};
uint16_t tbSize = 0;
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);
uint8_t ssbIdx = 0;
PdcchCfg *pdcch = &(sib1SchCfg->sib1PdcchCfg);
pdsch->codeword[cwCount].mcsIndex = sib1SchCfg->sib1Mcs;
pdsch->codeword[cwCount].mcsTable = 0; /* notqam256 */
pdsch->codeword[cwCount].rvIndex = 0;
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->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;
pdsch->dmrs.dmrsConfigType = 0; /* type-1 */
pdsch->dmrs.dlDmrsScramblingId = pci;
pdsch->dmrs.scid = 0;
pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize,sib1SchCfg->sib1Mcs,numPdschSymbols);
pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */
pdsch->pdschTimeAlloc.rowIndex = 1;
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;
pdsch->pdschTimeAlloc.timeAlloc.numSymb = numPdschSymbols;
pdsch->beamPdschInfo.numPrgs = 1;
pdsch->beamPdschInfo.prgSize = 1;
#define SI_RNTI 0xFFFF
#define P_RNTI 0xFFFE
#define DMRS_MAP_TYPE_A 1
#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
#define SCH_DEFAULT_K1 1
#define SCH_TQ_SIZE 10
uint8_t qm = mcsTable[mcs][1];
uint16_t rValue = mcsTable[mcs][2];
uint8_t numLayer = 1; /* v value */
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
tbSize = tbSize * 8; //Calculate tbSize in bits
nre = ceil( (float)tbSize * 1024 / (qm * rValue * numLayer));
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;
if (nreDash > 156)
nre = 156;
#define MAX_NUM_DL_DATA_TO_UL_ACK 15
#define SD_SIZE 3
#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)) \
#define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \
{ \
if ((crntTime.slot + incr) > (MAX_SLOTS - 1)) \