Fixes for SIB1 transmission in Radio Mode [Issue-ID: ODUHIGH-325] 56/6056/4
authorlal.harshita <Harshita.Lal@radisys.com>
Tue, 11 May 2021 10:22:47 +0000 (15:52 +0530)
committerlal.harshita <Harshita.Lal@radisys.com>
Wed, 12 May 2021 18:01:46 +0000 (23:31 +0530)
Change-Id: I12b61d4e2de132ccbae338368a441ffc560a234a
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
build/odu/makefile
src/5gnrmac/lwr_mac_fsm.c
src/5gnrmac/lwr_mac_handle_phy.c
src/5gnrsch/sch.c
src/5gnrsch/sch.h
src/5gnrsch/sch_utils.c
src/cm/mac_sch_interface.h

index 9652f5d..0720093 100644 (file)
@@ -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
 
index 164f038..4fea616 100644 (file)
@@ -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;
index 54a6643..ebcd761 100644 (file)
@@ -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 */
 
 /*******************************************************************
index 5de50fd..89c3473 100644 (file)
@@ -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;
index 4ca3bc6..9bfc6ed 100644 (file)
@@ -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
 
index 4cb93c6..9c14e90 100644 (file)
@@ -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;
index 285d200..599b638 100644 (file)
@@ -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))           \