Merge "<JIRA ID: ODUHIGH-332 : Change in TBS calculation part as per TS 38.214 sectio...
authorSphoorthi Dayanand <sphoorthi.dayanand@radisys.com>
Tue, 18 May 2021 11:32:12 +0000 (11:32 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Tue, 18 May 2021 11:32:12 +0000 (11:32 +0000)
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_common.c
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 d92d513..e064b83 100644 (file)
@@ -181,6 +181,7 @@ void schPrachResAlloc(SchCellCb *cell, UlSchedInfo *ulSchedInfo, SlotIndInfo pra
    uint8_t  prachOcas = 0;
    uint8_t  dataType = 0;
    uint8_t  idx = 0;
+   uint8_t  subFrame = 0;
    SchUlSlotInfo *schUlSlotInfo = NULLP;
 
    puschScs      = cell->cellCfg.schInitialUlBwp.bwp.scs;
@@ -194,45 +195,59 @@ void schPrachResAlloc(SchCellCb *cell, UlSchedInfo *ulSchedInfo, SlotIndInfo pra
 
    if((prachOccasionTimingInfo.sfn%x) == y)
    {
+#ifdef NR_TDD
+      subFrame = prachOccasionTimingInfo.slot/2;
+#else
+      subFrame = prachOccasionTimingInfo.slot;
+#endif
       /* check for subFrame number */
-      if ((1 << prachOccasionTimingInfo.slot) & prachSubframe)
+      if ((1 << subFrame) & prachSubframe)
       {
-        /* prach ocassion present in this subframe */
-
-        prachFormat      = prachCfgIdxTable[prachCfgIdx][0];
-        prachStartSymbol = prachCfgIdxTable[prachCfgIdx][4];
-        prachOcas        = prachCfgIdxTable[prachCfgIdx][6];
-
-        /* freq domain resource determination for RACH*/
-        freqStart = cell->cellCfg.schRachCfg.msg1FreqStart;
-        /* numRa determined as 𝑛 belonging {0,1,.., M − 1}, 
-         * where M is given by msg1Fdm */
-        numRa = (cell->cellCfg.schRachCfg.msg1Fdm - 1);
-        for(idx=0; idx<MAX_RACH_NUM_RB_IDX; idx++)
-        {
-           if(numRbForPrachTable[idx][0] == cell->cellCfg.schRachCfg.rootSeqLen)
-           {
-              if(numRbForPrachTable[idx][1] == cell->cellCfg.schRachCfg.prachSubcSpacing)
-              {
-                 if(numRbForPrachTable[idx][2] == puschScs)
-                 {
-                    break;
-                 }
-              }
-           }
-        }
-        numPrachRb = numRbForPrachTable[idx][3];
-        dataType |= SCH_DATATYPE_PRACH;
-        /* Considering first slot in the frame for PRACH */
-        idx = 0;
-        schUlSlotInfo->assignedPrb[idx] = freqStart+numPrachRb;
+         /* prach ocassion present in this subframe */
+#ifdef NR_TDD
+         if(UL_SLOT != schGetSlotSymbFrmt(prachOccasionTimingInfo.slot, cell->slotFrmtBitMap))
+         {
+            DU_LOG("\nERROR  --> SCH : PrachCfgIdx %d doesn't support UL slot", prachCfgIdx);
+         }
+         else
+#endif
+         {
+            prachFormat      = prachCfgIdxTable[prachCfgIdx][0];
+            prachStartSymbol = prachCfgIdxTable[prachCfgIdx][4];
+            prachOcas        = prachCfgIdxTable[prachCfgIdx][6];
+
+            /* freq domain resource determination for RACH*/
+            freqStart = cell->cellCfg.schRachCfg.msg1FreqStart;
+            /* numRa determined as 𝑛 belonging {0,1,.., M − 1}, 
+             * where M is given by msg1Fdm */
+            numRa = (cell->cellCfg.schRachCfg.msg1Fdm - 1);
+            for(idx=0; idx<MAX_RACH_NUM_RB_IDX; idx++)
+            {
+               if(numRbForPrachTable[idx][0] == cell->cellCfg.schRachCfg.rootSeqLen)
+               {
+                  if(numRbForPrachTable[idx][1] == cell->cellCfg.schRachCfg.prachSubcSpacing)
+                  {
+                     if(numRbForPrachTable[idx][2] == puschScs)
+                     {
+                        break;
+                     }
+                  }
+               }
+            }
+            numPrachRb = numRbForPrachTable[idx][3];
+            dataType |= SCH_DATATYPE_PRACH;
+            /* Considering first slot in the frame for PRACH */
+            idx = 0;
+            schUlSlotInfo->assignedPrb[idx] = freqStart+numPrachRb;
+         }
+         ulSchedInfo->dataType = dataType;
+         /* prach info */
+         ulSchedInfo->prachSchInfo.numPrachOcas   = prachOcas;
+         ulSchedInfo->prachSchInfo.prachFormat    = prachFormat;
+         ulSchedInfo->prachSchInfo.numRa          = numRa;
+         ulSchedInfo->prachSchInfo.prachStartSymb = prachStartSymbol;
+         DU_LOG("\nINFO  --> SCH : RACH occassion set for slot %d", prachOccasionTimingInfo.slot);
       }
-      ulSchedInfo->dataType = dataType;
-      /* prach info */
-      ulSchedInfo->prachSchInfo.numPrachOcas   = prachOcas;
-      ulSchedInfo->prachSchInfo.prachFormat    = prachFormat;
-      ulSchedInfo->prachSchInfo.numRa          = numRa;
-      ulSchedInfo->prachSchInfo.prachStartSymb = prachStartSymbol;
    }
 }
 
index 5e014f9..1e4cab2 100644 (file)
@@ -133,6 +133,288 @@ uint16_t numRbForPrachTable[MAX_RACH_NUM_RB_IDX][5] = {
 {   139,  120,   120,  12,  2    }, /* index 15 */
 };
 
+#ifdef NR_TDD
+
+/* prach config index Table 6.3.3.2-3 spec 38.211 
+ * PRACH format given as follows:
+ * 0 = 0
+ * 1 = 1
+ * 2 = 2
+ * 3 = 3
+ * 4 = A1
+ * 5 = A2
+ * 6 = A3
+ * 7 = B1
+ * 8 = B4
+ * 9 = C0
+ * 10 = C2
+ * 11 = A1/B1
+ * 12 = A2/B2
+ * 13 = A3/B3 
+ * Subframe num is represented considering 0-9 bits and
+ * value 1 corresponds to the subframe that is valid 
+ */
+
+uint16_t prachCfgIdxTable[MAX_PRACH_CONFIG_IDX][8] = {
+{ 0, 16,  1,  512,  0,  0,  0,  0 }, /* index 0   */
+{ 0,  8,  1,  512,  0,  0,  0,  0 }, /* index 1   */
+{ 0,  4,  1,  512,  0,  0,  0,  0 }, /* index 2   */
+{ 0,  2,  0,  512,  0,  0,  0,  0 }, /* index 3   */
+{ 0,  2,  1,  512,  0,  0,  0,  0 }, /* index 4   */
+{ 0,  2,  0,   16,  0,  0,  0,  0 }, /* index 5   */
+{ 0,  2,  1,   16,  0,  0,  0,  0 }, /* index 6   */
+{ 0,  1,  0,  512,  0,  0,  0,  0 }, /* index 7   */
+{ 0,  1,  0,  256,  0,  0,  0,  0 }, /* index 8   */
+{ 0,  1,  0,  128,  0,  0,  0,  0 }, /* index 9   */
+{ 0,  1,  0,   64,  0,  0,  0,  0 }, /* index 10  */
+{ 0,  1,  0,   32,  0,  0,  0,  0 }, /* index 11  */
+{ 0,  1,  0,   16,  0,  0,  0,  0 }, /* index 12  */
+{ 0,  1,  0,    8,  0,  0,  0,  0 }, /* index 13  */
+{ 0,  1,  0,    4,  0,  0,  0,  0 }, /* index 14  */
+{ 0,  1,  0,   66,  0,  0,  0,  0 }, /* index 15  */
+{ 0,  1,  0,   66,  7,  0,  0,  0 }, /* index 16  */
+{ 0,  1,  0,  528,  0,  0,  0,  0 }, /* index 17  */
+{ 0,  1,  0,  264,  0,  0,  0,  0 }, /* index 18  */
+{ 0,  1,  0,  132,  0,  0,  0,  0 }, /* index 19  */
+{ 0,  1,  0,  768,  0,  0,  0,  0 }, /* index 20  */
+{ 0,  1,  0,  784,  0,  0,  0,  0 }, /* index 21  */
+{ 0,  1,  0,  536,  0,  0,  0,  0 }, /* index 22  */
+{ 0,  1,  0,  896,  0,  0,  0,  0 }, /* index 23  */
+{ 0,  1,  0,  792,  0,  0,  0,  0 }, /* index 24  */
+{ 0,  1,  0,  960,  0,  0,  0,  0 }, /* index 25  */
+{ 0,  1,  0,  594,  0,  0,  0,  0 }, /* index 26  */
+{ 0,  1,  0,  682,  0,  0,  0,  0 }, /* index 27  */
+{ 1, 16,  1,  128,  0,  0,  0,  0 }, /* index 28  */
+{ 1,  8,  1,  128,  0,  0,  0,  0 }, /* index 29  */
+{ 1,  4,  1,  128,  0,  0,  0,  0 }, /* index 30  */
+{ 1,  2,  0,  128,  0,  0,  0,  0 }, /* index 31  */
+{ 1,  2,  1,  128,  0,  0,  0,  0 }, /* index 32  */
+{ 1,  1,  0,  128,  0,  0,  0,  0 }, /* index 33  */
+{ 2, 16,  1,   64,  0,  0,  0,  0 }, /* index 34  */
+{ 2,  8,  1,   64,  0,  0,  0,  0 }, /* index 35  */
+{ 2,  4,  1,   64,  0,  0,  0,  0 }, /* index 36  */
+{ 2,  2,  0,   64,  7,  0,  0,  0 }, /* index 37  */
+{ 2,  2,  1,   64,  7,  0,  0,  0 }, /* index 38  */
+{ 2,  1,  0,   64,  7,  0,  0,  0 }, /* index 39  */
+{ 3, 16,  1,  512,  0,  0,  0,  0 }, /* index 40  */
+{ 3,  8,  1,  512,  0,  0,  0,  0 }, /* index 41  */
+{ 3,  4,  1,  512,  0,  0,  0,  0 }, /* index 42  */
+{ 3,  2,  0,  512,  0,  0,  0,  0 }, /* index 43  */
+{ 3,  2,  1,  512,  0,  0,  0,  0 }, /* index 44  */
+{ 3,  2,  0,   16,  0,  0,  0,  0 }, /* index 45  */
+{ 3,  2,  1,   16,  0,  0,  0,  0 }, /* index 46  */
+{ 3,  1,  0,  512,  0,  0,  0,  0 }, /* index 47  */
+{ 3,  1,  0,  256,  0,  0,  0,  0 }, /* index 48  */
+{ 3,  1,  0,  128,  0,  0,  0,  0 }, /* index 49  */
+{ 3,  1,  0,   64,  0,  0,  0,  0 }, /* index 50  */
+{ 3,  1,  0,   32,  0,  0,  0,  0 }, /* index 51  */
+{ 3,  1,  0,   16,  0,  0,  0,  0 }, /* index 52  */
+{ 3,  1,  0,    8,  0,  0,  0,  0 }, /* index 53  */
+{ 3,  1,  0,    4,  0,  0,  0,  0 }, /* index 54  */
+{ 3,  1,  0,   66,  0,  0,  0,  0 }, /* index 55  */
+{ 3,  1,  0,   66,  7,  0,  0,  0 }, /* index 56  */
+{ 3,  1,  0,  528,  0,  0,  0,  0 }, /* index 57  */
+{ 3,  1,  0,  264,  0,  0,  0,  0 }, /* index 58  */
+{ 3,  1,  0,  132,  0,  0,  0,  0 }, /* index 59  */
+{ 3,  1,  0,  768,  0,  0,  0,  0 }, /* index 60  */
+{ 3,  1,  0,  784,  0,  0,  0,  0 }, /* index 61  */
+{ 3,  1,  0,  536,  0,  0,  0,  0 }, /* index 62  */
+{ 3,  1,  0,  896,  0,  0,  0,  0 }, /* index 63  */
+{ 3,  1,  0,  792,  0,  0,  0,  0 }, /* index 64  */
+{ 3,  1,  0,  594,  0,  0,  0,  0 }, /* index 65  */
+{ 3,  1,  0,  682,  0,  0,  0,  0 }, /* index 66  */
+{ 4, 16,  1,  512,  0,  2,  6,  2 }, /* index 67  */
+{ 4,  8,  1,  512,  0,  2,  6,  2 }, /* index 68  */
+{ 4,  4,  1,  512,  0,  1,  6,  2 }, /* index 69  */
+{ 4,  2,  1,  512,  0,  1,  6,  2 }, /* index 70  */
+{ 4,  2,  1,  528,  7,  1,  3,  2 }, /* index 71  */
+{ 4,  2,  1,  640,  7,  1,  3,  2 }, /* index 72  */
+{ 4,  2,  1,  640,  0,  1,  6,  2 }, /* index 73  */
+{ 4,  2,  1,  768,  0,  2,  6,  2 }, /* index 74  */
+{ 4,  2,  1,  528,  0,  2,  6,  2 }, /* index 75  */
+{ 4,  2,  1,  924,  0,  1,  6,  2 }, /* index 76  */
+{ 4,  1,  0,  512,  0,  2,  6,  2 }, /* index 77  */
+{ 4,  1,  0,  512,  7,  1,  3,  2 }, /* index 78  */
+{ 4,  1,  0,  512,  0,  1,  6,  2 }, /* index 79  */
+{ 4,  1,  0,  768,  0,  2,  6,  2 }, /* index 80  */
+{ 4,  1,  0,  528,  0,  1,  6,  2 }, /* index 81  */
+{ 4,  1,  0,  640,  7,  1,  3,  2 }, /* index 82  */
+{ 4,  1,  0,  792,  0,  1,  6,  2 }, /* index 83  */
+{ 4,  1,  0,  792,  0,  2,  6,  2 }, /* index 84  */
+{ 4,  1,  0,  682,  0,  1,  6,  2 }, /* index 85  */
+{ 4,  1,  0, 1023,  7,  1,  3,  2 }, /* index 86  */
+{ 5, 16,  1,  512,  0,  2,  3,  4 }, /* index 87  */
+{ 5,  8,  1,  512,  0,  2,  3,  4 }, /* index 88  */
+{ 5,  4,  1,  512,  0,  1,  3,  4 }, /* index 89  */
+{ 5,  2,  1,  640,  0,  1,  3,  4 }, /* index 90  */
+{ 5,  2,  1,  768,  0,  2,  3,  4 }, /* index 91  */
+{ 5,  2,  1,  640,  9,  1,  1,  4 }, /* index 92  */
+{ 5,  2,  1,  528,  9,  1,  1,  4 }, /* index 93  */
+{ 5,  2,  1,  528,  0,  2,  3,  4 }, /* index 94  */
+{ 5,  2,  1,  924,  0,  1,  3,  4 }, /* index 95  */
+{ 5,  1,  0,    4,  0,  1,  3,  4 }, /* index 96  */
+{ 5,  1,  0,  128,  0,  1,  3,  4 }, /* index 97  */
+{ 5,  2,  1,  512,  0,  1,  3,  4 }, /* index 98  */
+{ 5,  1,  0,  512,  0,  2,  3,  4 }, /* index 99  */
+{ 5,  1,  0,  512,  9,  1,  1,  4 }, /* index 100  */
+{ 5,  1,  0,  512,  0,  1,  3,  4 }, /* index 101  */
+{ 5,  1,  0,  132,  0,  1,  3,  4 }, /* index 102  */
+{ 5,  1,  0,  768,  0,  2,  3,  4 }, /* index 103  */
+{ 5,  1,  0,  528,  0,  1,  3,  4 }, /* index 104  */
+{ 5,  1,  0,  640,  9,  1,  1,  4 }, /* index 105  */
+{ 5,  1,  0,  792,  0,  1,  3,  4 }, /* index 106  */
+{ 5,  1,  0,  792,  0,  2,  3,  4 }, /* index 107  */
+{ 5,  1,  0,  682,  0,  1,  3,  4 }, /* index 108  */
+{ 5,  1,  0, 1023,  9,  1,  1,  4 }, /* index 109  */
+{ 6, 16,  1,  512,  0,  2,  2,  6 }, /* index 110  */
+{ 6,  8,  1,  512,  0,  2,  2,  6 }, /* index 111  */
+{ 6,  4,  1,  512,  0,  1,  2,  6 }, /* index 112  */
+{ 6,  2,  1,  528,  7,  1,  1,  6 }, /* index 113  */
+{ 6,  2,  1,  640,  7,  1,  1,  6 }, /* index 114  */
+{ 6,  2,  1,  640,  0,  1,  2,  6 }, /* index 115  */
+{ 6,  2,  1,  528,  0,  2,  2,  6 }, /* index 116  */
+{ 6,  2,  1,  768,  0,  2,  2,  6 }, /* index 117  */
+{ 6,  2,  1,  924,  0,  1,  2,  6 }, /* index 118  */
+{ 6,  1,  0,    4,  0,  1,  2,  6 }, /* index 119  */
+{ 6,  1,  0,  128,  0,  1,  2,  6 }, /* index 120  */
+{ 6,  2,  1,  512,  0,  1,  2,  6 }, /* index 121  */
+{ 6,  1,  0,  512,  0,  2,  2,  6 }, /* index 122  */
+{ 6,  1,  0,  512,  7,  1,  1,  6 }, /* index 123  */
+{ 6,  1,  0,  512,  0,  1,  2,  6 }, /* index 124  */
+{ 6,  1,  0,  132,  0,  1,  2,  6 }, /* index 125  */
+{ 6,  1,  0,  768,  0,  2,  2,  6 }, /* index 126  */
+{ 6,  1,  0,  528,  0,  1,  2,  6 }, /* index 127  */
+{ 6,  1,  0,  640,  7,  1,  1,  6 }, /* index 128  */
+{ 6,  1,  0,  792,  0,  1,  2,  6 }, /* index 129  */
+{ 6,  1,  0,  792,  0,  2,  2,  6 }, /* index 130  */
+{ 6,  1,  0,  682,  0,  1,  2,  6 }, /* index 131  */
+{ 6,  1,  0, 1023,  7,  1,  1,  6 }, /* index 132  */
+{ 7,  4,  1,  512,  2,  1,  6,  2 }, /* index 133  */
+{ 7,  2,  1,  512,  2,  1,  6,  2 }, /* index 134  */
+{ 7,  2,  1,  640,  2,  1,  6,  2 }, /* index 135  */
+{ 7,  2,  1,  528,  8,  1,  3,  2 }, /* index 136  */
+{ 7,  2,  1,  528,  2,  2,  6,  2 }, /* index 137  */
+{ 7,  1,  0,  512,  2,  2,  6,  2 }, /* index 138  */
+{ 7,  1,  0,  512,  8,  1,  3,  2 }, /* index 139  */
+{ 7,  1,  0,  512,  2,  1,  6,  2 }, /* index 140  */
+{ 7,  1,  0,  768,  2,  2,  6,  2 }, /* index 141  */
+{ 7,  1,  0,  528,  2,  1,  6,  2 }, /* index 142  */
+{ 7,  1,  0,  640,  8,  1,  3,  2 }, /* index 143  */
+{ 7,  1,  0,  682,  2,  1,  6,  2 }, /* index 144  */
+{ 8, 16,  1,  512,  0,  2,  1, 12 }, /* index 145  */
+{ 8,  8,  1,  512,  0,  2,  1, 12 }, /* index 146  */
+{ 8,  4,  1,  512,  2,  1,  1, 12 }, /* index 147  */
+{ 8,  2,  1,  512,  0,  1,  1, 12 }, /* index 148  */
+{ 8,  2,  1,  512,  2,  1,  1, 12 }, /* index 149  */
+{ 8,  2,  1,  640,  2,  1,  1, 12 }, /* index 150  */
+{ 8,  2,  1,  528,  2,  1,  1, 12 }, /* index 151  */
+{ 8,  2,  1,  528,  0,  2,  1, 12 }, /* index 152  */
+{ 8,  2,  1,  768,  0,  2,  1, 12 }, /* index 153  */
+{ 8,  2,  1,  924,  0,  1,  1, 12 }, /* index 154  */
+{ 8,  1,  0,    2,  0,  1,  1, 12 }, /* index 155  */
+{ 8,  1,  0,    4,  0,  1,  1, 12 }, /* index 156  */
+{ 8,  1,  0,   16,  0,  1,  1, 12 }, /* index 157  */
+{ 8,  1,  0,  128,  0,  1,  1, 12 }, /* index 158  */
+{ 8,  1,  0,  512,  0,  1,  1, 12 }, /* index 159  */
+{ 8,  1,  0,  512,  2,  1,  1, 12 }, /* index 160  */
+{ 8,  1,  0,  512,  0,  2,  1, 12 }, /* index 161  */
+{ 8,  1,  0,  528,  2,  1,  1, 12 }, /* index 162  */
+{ 8,  1,  0,  640,  2,  1,  1, 12 }, /* index 163  */
+{ 8,  1,  0,  768,  0,  2,  1, 12 }, /* index 164  */
+{ 8,  1,  0,  792,  2,  1,  1, 12 }, /* index 165  */
+{ 8,  1,  0,  682,  2,  1,  1, 12 }, /* index 166  */
+{ 8,  1,  0, 1023,  0,  2,  1, 12 }, /* index 167  */
+{ 8,  1,  0, 1023,  2,  1,  1, 12 }, /* index 168  */
+{ 9, 16,  1,  512,  2,  2,  6,  2 }, /* index 169  */
+{ 9,  8,  1,  512,  2,  2,  6,  2 }, /* index 170  */
+{ 9,  4,  1,  512,  2,  1,  6,  2 }, /* index 171  */
+{ 9,  2,  1,  512,  2,  1,  6,  2 }, /* index 172  */
+{ 9,  2,  1,  768,  2,  2,  6,  2 }, /* index 173  */
+{ 9,  2,  1,  640,  2,  1,  6,  2 }, /* index 174  */
+{ 9,  2,  1,  640,  8,  1,  3,  2 }, /* index 175  */
+{ 9,  2,  1,  528,  8,  1,  3,  2 }, /* index 176  */
+{ 9,  2,  1,  528,  2,  2,  6,  2 }, /* index 177  */
+{ 9,  2,  1,  924,  2,  1,  6,  2 }, /* index 178  */
+{ 9,  1,  0,  512,  2,  2,  6,  2 }, /* index 179  */
+{ 9,  1,  0,  512,  8,  1,  3,  2 }, /* index 180  */
+{ 9,  1,  0,  512,  2,  1,  6,  2 }, /* index 181  */
+{ 9,  1,  0,  768,  2,  2,  6,  2 }, /* index 182  */
+{ 9,  1,  0,  528,  2,  1,  6,  2 }, /* index 183  */
+{ 9,  1,  0,  640,  8,  1,  3,  2 }, /* index 184  */
+{ 9,  1,  0,  792,  2,  1,  6,  2 }, /* index 185  */
+{ 9,  1,  0,  792,  2,  2,  6,  2 }, /* index 186  */
+{ 9,  1,  0,  682,  2,  1,  6,  2 }, /* index 187  */
+{ 9,  1,  0, 1023,  8,  1,  3,  2 }, /* index 188  */
+{10, 16,  1,  512,  2,  2,  2,  6 }, /* index 189  */
+{10,  8,  1,  512,  2,  2,  2,  6 }, /* index 190  */
+{10,  4,  1,  512,  2,  1,  2,  6 }, /* index 191  */
+{10,  2,  1,  512,  2,  1,  2,  6 }, /* index 192  */
+{10,  2,  1,  768,  2,  2,  2,  6 }, /* index 193  */
+{10,  2,  1,  640,  2,  1,  2,  6 }, /* index 194  */
+{10,  2,  1,  640,  8,  1,  1,  6 }, /* index 195  */
+{10,  2,  1,  528,  8,  1,  1,  6 }, /* index 196  */
+{10,  2,  1,  528,  2,  2,  2,  6 }, /* index 197  */
+{10,  2,  1,  924,  2,  1,  2,  6 }, /* index 198  */
+{10,  8,  1,  512,  8,  2,  1,  6 }, /* index 199  */
+{10,  4,  1,  512,  8,  1,  1,  6 }, /* index 200  */
+{10,  1,  0,  512,  2,  2,  2,  6 }, /* index 201  */
+{10,  1,  0,  512,  8,  1,  1,  6 }, /* index 202  */
+{10,  1,  0,  512,  2,  1,  2,  6 }, /* index 203  */
+{10,  1,  0,  768,  2,  2,  2,  6 }, /* index 204  */
+{10,  1,  0,  528,  2,  1,  2,  6 }, /* index 205  */
+{10,  1,  0,  640,  8,  1,  1,  6 }, /* index 206  */
+{10,  1,  0,  792,  2,  1,  2,  6 }, /* index 207  */
+{10,  1,  0,  792,  2,  2,  2,  6 }, /* index 208  */
+{10,  1,  0,  682,  2,  1,  2,  6 }, /* index 209  */
+{10,  1,  0, 1023,  8,  1,  1,  6 }, /* index 210  */
+{11,  2,  1,  512,  2,  1,  6,  2 }, /* index 211  */
+{11,  2,  1,  528,  8,  1,  3,  2 }, /* index 212  */
+{11,  2,  1,  640,  8,  1,  3,  2 }, /* index 213  */
+{11,  2,  1,  640,  2,  1,  6,  2 }, /* index 214  */
+{11,  2,  1,  528,  2,  2,  6,  2 }, /* index 215  */
+{11,  2,  1,  768,  2,  2,  6,  2 }, /* index 216  */
+{11,  1,  0,  512,  2,  2,  6,  2 }, /* index 217  */
+{11,  1,  0,  512,  8,  1,  3,  2 }, /* index 218  */
+{11,  1,  0,  512,  2,  1,  6,  2 }, /* index 219  */
+{11,  1,  0,  768,  2,  2,  6,  2 }, /* index 220  */
+{11,  1,  0,  528,  2,  1,  6,  2 }, /* index 221  */
+{11,  1,  0,  640,  8,  1,  3,  2 }, /* index 222  */
+{11,  1,  0,  792,  2,  2,  6,  2 }, /* index 223  */
+{11,  1,  0,  682,  2,  1,  6,  2 }, /* index 224  */
+{11,  1,  0, 1023,  8,  1,  3,  2 }, /* index 225  */
+{12,  2,  1,  512,  0,  1,  3,  4 }, /* index 226  */
+{12,  2,  1,  528,  6,  1,  2,  4 }, /* index 227  */
+{12,  2,  1,  640,  6,  1,  2,  4 }, /* index 228  */
+{12,  2,  1,  528,  0,  2,  3,  4 }, /* index 229  */
+{12,  2,  1,  768,  0,  2,  3,  4 }, /* index 230  */
+{12,  1,  0,  512,  0,  2,  3,  4 }, /* index 231  */
+{12,  1,  0,  512,  6,  1,  2,  4 }, /* index 232  */
+{12,  1,  0,  512,  0,  1,  3,  4 }, /* index 233  */
+{12,  1,  0,  768,  0,  2,  3,  4 }, /* index 234  */
+{12,  1,  0,  528,  0,  1,  3,  4 }, /* index 235  */
+{12,  1,  0,  640,  6,  1,  2,  4 }, /* index 236  */
+{12,  1,  0,  792,  0,  1,  3,  4 }, /* index 237  */
+{12,  1,  0,  792,  0,  2,  3,  4 }, /* index 238  */
+{12,  1,  0,  682,  0,  1,  3,  4 }, /* index 239  */
+{12,  1,  0, 1023,  6,  1,  2,  4 }, /* index 240  */
+{13,  2,  1,  512,  0,  1,  2,  6 }, /* index 241  */
+{13,  2,  1,  528,  2,  1,  2,  6 }, /* index 242  */
+{13,  2,  1,  640,  0,  1,  2,  6 }, /* index 243  */
+{13,  2,  1,  640,  2,  1,  2,  6 }, /* index 244  */
+{13,  2,  1,  528,  0,  2,  2,  6 }, /* index 245  */
+{13,  2,  1,  768,  0,  2,  2,  6 }, /* index 246  */
+{13,  1,  0,  512,  0,  2,  2,  6 }, /* index 247  */
+{13,  1,  0,  512,  2,  1,  2,  6 }, /* index 248  */
+{13,  1,  0,  512,  0,  1,  2,  6 }, /* index 249  */
+{13,  1,  0,  768,  0,  2,  2,  6 }, /* index 250  */
+{13,  1,  0,  528,  0,  1,  2,  6 }, /* index 251  */
+{13,  1,  0,  640,  2,  1,  2,  6 }, /* index 252  */
+{13,  1,  0,  792,  0,  2,  2,  6 }, /* index 253  */
+{13,  1,  0,  682,  0,  1,  2,  6 }, /* index 254  */
+{13,  1,  0, 1023,  2,  1,  2,  6 }  /* index 255  */
+};
+
+#else
 /* prach config index Table 6.3.3.2-2 spec 38.211 
  * PRACH format given as follows:
  * 0 = 0
@@ -411,6 +693,7 @@ uint16_t prachCfgIdxTable[MAX_PRACH_CONFIG_IDX][8] = {
 {10,  1,  0, 1023,  0,  2,  2,  6 }, /* index 254  */
 {10,  1,  0,  682,  0,  2,  2,  6 }  /* index 255  */
 };
+#endif
 
 /* Defintion of delta value Table 6.1.2.1.1-5 spec 38.214 */
 uint8_t puschDeltaTable[MAX_MU_PUSCH] = { 2, 3, 4, 6 };
@@ -535,6 +818,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 +829,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;
@@ -714,7 +998,7 @@ void schInitDlSlot(SchDlSlotInfo *schDlSlotInfo)
 #ifdef NR_TDD
 
 /**
- * @brief determines slot format
+ * @brief determines slot/symbol format
  *
  * @details
  *
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))           \