Deleted the rlog folder
[o-du/l2.git] / src / 5gnrsch / sch_utils.c
index 7e4b59a..97c6aa3 100644 (file)
@@ -470,11 +470,16 @@ uint8_t pucchResourceSet[MAX_PUCCH_RES_SET_IDX][4] = {
  *  @param[in]  payLoadSize - size of payload in bytes
  *  @return     TBsize from the Table in bytes
  **/
-uint16_t schCalcTbSize(uint16_t payLoadSize)
+uint16_t schCalcTbSize(uint32_t payLoadSize)
 {
    uint8_t tbsIndex = 0;
-   payLoadSize = payLoadSize*8;
+   uint16_t maxTbSize;
+
+   maxTbSize = tbSizeTable[TOTAL_TBSIZE_VALUES -1]/8;
+   if(payLoadSize >= maxTbSize)
+      return maxTbSize;
 
+   payLoadSize = payLoadSize*8;
    while(payLoadSize > tbSizeTable[tbsIndex])
    {
       tbsIndex++;
@@ -524,7 +529,53 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols)
    numPrb = ceil((float)nre / nreDash);   
    return numPrb;
 }
+/**
+* @brief calculation of transport block size.
+*
+* @details
+*
+*     Function: schCalcTbSizeFromNPrb
+*
+*     This function calculates the transport block size
+*
+*  @param[in]  nPrb is num PRB
+*  @param[in]  mcs
+*  @param[in]  number of symbols
+*  @return   tbSize
+**/
+uint16_t schCalcTbSizeFromNPrb(uint16_t numPrb, uint16_t mcs, uint8_t numSymbols)
+{   
+   uint16_t tbSize = 0;
+   uint16_t tbsIndex = 0;
+   uint16_t nre = 0;
+   uint16_t nreDash = 0;
+   uint8_t  qm     = mcsTable[mcs][1];
+   uint16_t rValue = mcsTable[mcs][2];
+   uint8_t  numLayer = 1;       /* v value */
+   
+   /* formula used for calculation of rbSize, 38.213 section 5.1.3.2 *
+   * Ninfo = Nre . R . Qm . v   where [ NInfo is tbSize]                *
+   * Nre' = Nsc . NsymPdsch - NdmrsSymb - Noh                        *
+   * Nre = min(156,Nre') . nPrb                                      */
+   
+   nreDash = ceil( (12 * numSymbols) - NUM_DMRS_SYMBOLS - 0);
+  
+   if(nreDash > 156)
+      nreDash = 156;
 
+   nre = nreDash * numPrb;
+   tbSize = ceil(nre * qm * numLayer * rValue/1024.0);
+   tbSize = ceil(tbSize/8.0);
+   
+   while(tbSize > tbSizeTable[tbsIndex])
+   {
+      tbsIndex++;
+   }
+   tbSize = tbSizeTable[tbsIndex];
+
+   return tbSize;
+
+}
 /**
  * @brief fetching ueCb from cellCb
  *
@@ -595,9 +646,42 @@ void schInitDlSlot(SchDlSlotInfo *schDlSlotInfo)
    {
       memset(&schDlSlotInfo->ssbInfo[itr], 0, sizeof(SsbInfo));
    }
+}
+
+#ifdef NR_TDD
+
+/**
+ * @brief determines slot format
+ *
+ * @details
+ *
+ *     Function : schGetSlotFrmt 
+ *      
+ *      This API is invoked to determine if current slot is DL or UL
+ *           
+ *  @param[in]  uint16_t slot
+ *  @param[in]  uint32_t slotBitMap from cellCb
+ *  @return  SlotConfig
+ *      -# DL    - 0 
+ *      -# UL    - 1
+ *      -# FLEXI - 2
+ **/
+SlotConfig schGetSlotFrmt(uint16_t slot, uint32_t slotBitMap)
+{
+   SlotConfig slotFrmt;
+   int mask1 = 0, mask2 = 0;
+
+   slot = (slot%10)*2;
+   mask1 = 1<<(slot);
+   mask2 = 1<<(slot+1);
+   slotFrmt = ((mask1 & slotBitMap)>>slot) + (2*((mask2 & slotBitMap)>>(slot+1)));
 
+   //printf("\n\n\n\n*****FormatType:%d Slot:%d****\n\n\n\n", slotFrmt, slot/2);
 
+   return slotFrmt;
 }
+
+#endif
 /**********************************************************************
          End of file
 **********************************************************************/