fixed tbSize issue 96/4696/1
authorBalaji Shankaran <balaji.shankaran@radisys.com>
Mon, 14 Sep 2020 09:36:28 +0000 (15:06 +0530)
committerBalaji Shankaran <balaji.shankaran@radisys.com>
Mon, 14 Sep 2020 09:37:16 +0000 (15:07 +0530)
Change-Id: I3938d9a63c9bf8ae0629dae9a8a4dce9fa784a8b
Signed-off-by: Balaji Shankaran <balaji.shankaran@radisys.com>
src/5gnrsch/sch_common.c
src/5gnrsch/sch_rach.c
src/5gnrsch/sch_utils.c

index 119cb26..7e61145 100644 (file)
@@ -112,7 +112,7 @@ uint8_t schBroadcastAlloc(SchCellCb *cell, DlBrdcstAlloc *dlBrdcstAlloc,
       uint8_t numSib1Prb      = 0;
       schDlSlotInfo->sib1Pres = true;
 
-      tbSize = schCalcTbSize(95); /* send this value to the func in bytes when considering sib1 size */
+      tbSize = schCalcTbSize(cell->cellCfg.sib1SchCfg.sib1PduLen); /* send this value to the func in bytes when considering sib1 size */
       numSib1Prb = schCalcNumPrb(tbSize,mcs,numPdschSymbols);
       for(idx=0; idx<SCH_SYMBOL_PER_SLOT; idx++)
       {
index c55ac07..7f03bfd 100644 (file)
@@ -82,7 +82,7 @@ uint16_t calculateRaRnti(uint8_t symbolIdx, uint8_t slotIdx, uint8_t freqIdx)
  **/
 void createSchRaCb(uint16_t tcrnti, Inst schInst)
 {
-       schCb[schInst].cells[schInst]->raCb[0].tcrnti = tcrnti;
+   schCb[schInst].cells[schInst]->raCb[0].tcrnti = tcrnti;
 }
 
 /**
@@ -103,72 +103,72 @@ void createSchRaCb(uint16_t tcrnti, Inst schInst)
 uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t *msg3StartRb,
 uint8_t *msg3NumRb)
 {
-       SchCellCb      *cell         = NULLP;
-       SchUlSlotInfo  *schUlSlotInfo    = NULLP;
-       uint8_t    puschMu       = 0;
-       uint8_t    msg3SlotAlloc = 0;
-       uint8_t    delta         = 0;
-       uint8_t    k2            = 0; 
-       uint8_t    startSymb     = 0;
-       uint8_t    symbLen       = 0; 
-       uint8_t    startRb       = 0;
-       uint8_t    numRb         = 0;
-       uint8_t    idx           = 0;
-       uint8_t    mcs            = 4;
-       uint8_t    numPdschSymbols= 14;
-       uint16_t   tbSize         = 0;
+   SchCellCb      *cell         = NULLP;
+   SchUlSlotInfo  *schUlSlotInfo    = NULLP;
+   uint8_t    puschMu       = 0;
+   uint8_t    msg3SlotAlloc = 0;
+   uint8_t    delta         = 0;
+   uint8_t    k2            = 0; 
+   uint8_t    startSymb     = 0;
+   uint8_t    symbLen       = 0; 
+   uint8_t    startRb       = 0;
+   uint8_t    numRb         = 0;
+   uint8_t    idx           = 0;
+   uint8_t    mcs            = 4;
+   uint8_t    numPdschSymbols= 14;
+   uint16_t   tbSize         = 0;
 
 
    cell = schCb[schInst].cells[schInst];
-//     puschMu = cell->cellCfg.puschMu;
-       delta = puschDeltaTable[puschMu];
-       k2 = cell->cellCfg.schInitialUlBwp.puschCommon.k2;
-       startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.startSymbol;
-       symbLen = cell->cellCfg.schInitialUlBwp.puschCommon.lengthSymbol;
-
-       /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */
-       msg3SlotAlloc = slot + k2 + delta;
-       msg3SlotAlloc = msg3SlotAlloc % SCH_NUM_SLOTS; 
-
-        startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb;
-        tbSize = schCalcTbSize(8); /* 6 bytes msg3  and 2 bytes header */
-       numRb = schCalcNumPrb(tbSize, mcs, numPdschSymbols);
-
-       /* allocating 1 extra RB for now */
-       numRb++;
-       /* increment PUSCH PRB */
-       cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb += numRb;
-
-       for(idx=startSymb; idx<symbLen; idx++)
-       {
-               cell->schUlSlotInfo[msg3SlotAlloc]->assignedPrb[idx] = startRb + numRb;
-       }
-       schUlSlotInfo = cell->schUlSlotInfo[msg3SlotAlloc];
+   //  puschMu = cell->cellCfg.puschMu;
+   delta = puschDeltaTable[puschMu];
+   k2 = cell->cellCfg.schInitialUlBwp.puschCommon.k2;
+   startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.startSymbol;
+   symbLen = cell->cellCfg.schInitialUlBwp.puschCommon.lengthSymbol;
+
+   /* Slot allocation for msg3 based on 38.214 section 6.1.2.1 */
+   msg3SlotAlloc = slot + k2 + delta;
+   msg3SlotAlloc = msg3SlotAlloc % SCH_NUM_SLOTS; 
+
+   startRb = cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb;
+   tbSize = schCalcTbSize(8); /* 6 bytes msg3  and 2 bytes header */
+   numRb = schCalcNumPrb(tbSize, mcs, numPdschSymbols);
+
+   /* allocating 1 extra RB for now */
+   numRb++;
+   /* increment PUSCH PRB */
+   cell->schUlSlotInfo[msg3SlotAlloc]->puschCurrentPrb += numRb;
+
+   for(idx=startSymb; idx<symbLen; idx++)
+   {
+      cell->schUlSlotInfo[msg3SlotAlloc]->assignedPrb[idx] = startRb + numRb;
+   }
+   schUlSlotInfo = cell->schUlSlotInfo[msg3SlotAlloc];
 
    SCH_ALLOC(schUlSlotInfo->schPuschInfo, sizeof(SchPuschInfo));
-       if(!schUlSlotInfo->schPuschInfo)
-       {
+   if(!schUlSlotInfo->schPuschInfo)
+   {
       DU_LOG("SCH: Memory allocation failed in schAllocMsg3Pusch");
-               return RFAILED;
-       }
-       schUlSlotInfo->schPuschInfo->harqProcId        = SCH_HARQ_PROC_ID;
-       schUlSlotInfo->schPuschInfo->resAllocType      = SCH_ALLOC_TYPE_1;
-       schUlSlotInfo->schPuschInfo->fdAlloc.startPrb  = startRb;
-       schUlSlotInfo->schPuschInfo->fdAlloc.numPrb    = numRb;
-       schUlSlotInfo->schPuschInfo->tdAlloc.startSymb = startSymb;
-       schUlSlotInfo->schPuschInfo->tdAlloc.numSymb   = symbLen;
-       schUlSlotInfo->schPuschInfo->tbInfo.mcs        = mcs;
-       schUlSlotInfo->schPuschInfo->tbInfo.ndi        = 1; /* new transmission */
-       schUlSlotInfo->schPuschInfo->tbInfo.rv          = 0;
-       schUlSlotInfo->schPuschInfo->tbInfo.tbSize     = 24; /*Considering 2 PRBs */
-       schUlSlotInfo->schPuschInfo->dmrsMappingType   = DMRS_MAP_TYPE_A;  /* Setting Type-A */
-       schUlSlotInfo->schPuschInfo->nrOfDmrsSymbols   = NUM_DMRS_SYMBOLS;
-       schUlSlotInfo->schPuschInfo->dmrsAddPos        = DMRS_ADDITIONAL_POS;
-
-       *msg3StartRb = startRb;
-       *msg3NumRb   = numRb;
-
-       return ROK;
+      return RFAILED;
+   }
+   schUlSlotInfo->schPuschInfo->harqProcId        = SCH_HARQ_PROC_ID;
+   schUlSlotInfo->schPuschInfo->resAllocType      = SCH_ALLOC_TYPE_1;
+   schUlSlotInfo->schPuschInfo->fdAlloc.startPrb  = startRb;
+   schUlSlotInfo->schPuschInfo->fdAlloc.numPrb    = numRb;
+   schUlSlotInfo->schPuschInfo->tdAlloc.startSymb = startSymb;
+   schUlSlotInfo->schPuschInfo->tdAlloc.numSymb   = symbLen;
+   schUlSlotInfo->schPuschInfo->tbInfo.mcs            = mcs;
+   schUlSlotInfo->schPuschInfo->tbInfo.ndi        = 1; /* new transmission */
+   schUlSlotInfo->schPuschInfo->tbInfo.rv              = 0;
+   schUlSlotInfo->schPuschInfo->tbInfo.tbSize     = 24; /*Considering 2 PRBs */
+   schUlSlotInfo->schPuschInfo->dmrsMappingType   = DMRS_MAP_TYPE_A;  /* Setting Type-A */
+   schUlSlotInfo->schPuschInfo->nrOfDmrsSymbols   = NUM_DMRS_SYMBOLS;
+   schUlSlotInfo->schPuschInfo->dmrsAddPos        = DMRS_ADDITIONAL_POS;
+
+   *msg3StartRb = startRb;
+   *msg3NumRb   = numRb;
+
+   return ROK;
 }
 
 
@@ -189,11 +189,11 @@ uint8_t *msg3NumRb)
 uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst)
 {
    SchCellCb *cell = schCb[schInst].cells[schInst];
-       RarInfo *rarInfo = NULLP;
-       uint16_t raRnti = 0;
-       uint16_t rarSlot = 0;
-       uint16_t msg3StartRb;
-       uint8_t  msg3NumRb;
+   RarInfo *rarInfo = NULLP;
+   uint16_t raRnti = 0;
+   uint16_t rarSlot = 0;
+   uint16_t msg3StartRb;
+   uint8_t  msg3NumRb;
    uint8_t  ret = ROK;
 
    /* RAR will sent with a delay of RAR_DELAY */
@@ -202,33 +202,33 @@ uint8_t schProcessRachInd(RachIndInfo *rachInd, Inst schInst)
    SchDlSlotInfo *schDlSlotInfo = cell->schDlSlotInfo[rarSlot]; /* RAR will sent in the next slot */
 
    /* Allocate the rarInfo, this pointer will be checked at schProcessSlotInd function */
-       SCH_ALLOC(rarInfo, sizeof(RarInfo));
-       if(rarInfo == NULLP)
-       {
+   SCH_ALLOC(rarInfo, sizeof(RarInfo));
+   if(rarInfo == NULLP)
+   {
       DU_LOG("\nMAC: Memory Allocation failed for rarInfo");
       return RFAILED;
-       }
+   }
+
+   schDlSlotInfo->rarInfo = rarInfo;
 
-       schDlSlotInfo->rarInfo = rarInfo;
-   
    /* calculate the ra-rnti value */
-       raRnti = calculateRaRnti(rachInd->symbolIdx,rachInd->slotIdx,rachInd->freqIdx);
-   
-       /* create raCb at SCH */
-       createSchRaCb(rachInd->crnti,schInst);
-
-       /* allocate resources for msg3 */
-       ret = schAllocMsg3Pusch(schInst, rarSlot, &msg3StartRb, &msg3NumRb);
-       if(ret == ROK)
-       {
-               /* fill RAR info */
-               rarInfo->raRnti                 = raRnti;
-               rarInfo->tcrnti                 = rachInd->crnti;
-               rarInfo->RAPID                  = rachInd->preambleIdx;
-               rarInfo->ta                     = rachInd->timingAdv;
-               rarInfo->msg3FreqAlloc.startPrb = msg3StartRb;
-               rarInfo->msg3FreqAlloc.numPrb   = msg3NumRb;
-       }
+   raRnti = calculateRaRnti(rachInd->symbolIdx,rachInd->slotIdx,rachInd->freqIdx);
+
+   /* create raCb at SCH */
+   createSchRaCb(rachInd->crnti,schInst);
+
+   /* allocate resources for msg3 */
+   ret = schAllocMsg3Pusch(schInst, rarSlot, &msg3StartRb, &msg3NumRb);
+   if(ret == ROK)
+   {
+      /* fill RAR info */
+      rarInfo->raRnti                 = raRnti;
+      rarInfo->tcrnti                 = rachInd->crnti;
+      rarInfo->RAPID                  = rachInd->preambleIdx;
+      rarInfo->ta                     = rachInd->timingAdv;
+      rarInfo->msg3FreqAlloc.startPrb = msg3StartRb;
+      rarInfo->msg3FreqAlloc.numPrb   = msg3NumRb;
+   }
    return ret;
 }
 
@@ -252,18 +252,18 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of
    Inst inst = 0;
    uint8_t coreset0Idx = 0;
    uint8_t numRbs = 0;
-       uint8_t firstSymbol = 0;
+   uint8_t firstSymbol = 0;
    uint8_t numSymbols = 0;
    uint8_t offset = 0;
    uint8_t FreqDomainResource[6] = {0};
    uint16_t tbSize = 0;
-       uint8_t numPdschSymbols = 12; /* considering pdsch region from 2 to 13 */
+   uint8_t numPdschSymbols = 12; /* considering pdsch region from 2 to 13 */
    uint8_t mcs = 4;  /* MCS fixed to 4 */
 
    SchBwpDlCfg *initialBwp = &schCb[inst].cells[inst]->cellCfg.schInitialDlBwp;
 
-       PdcchCfg *pdcch = &rarAlloc->rarPdcchCfg;
-       PdschCfg *pdsch = &rarAlloc->rarPdschCfg;
+   PdcchCfg *pdcch = &rarAlloc->rarPdcchCfg;
+   PdschCfg *pdsch = &rarAlloc->rarPdschCfg;
    BwpCfg *bwp = &rarAlloc->bwp;
 
    coreset0Idx     = initialBwp->pdcchCommon.commonSearchSpace.coresetId;
@@ -274,14 +274,14 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of
    offset        = coresetIdxTable[coreset0Idx][3];
 
    /* calculate time domain parameters */
-       // note: since slot value is made sl1, RAR can be sent at all slots
-       uint16_t mask = 0x2000;
-       for(firstSymbol=0; firstSymbol<14;firstSymbol++)
-       {
-          if(initialBwp->pdcchCommon.commonSearchSpace.monitoringSymbol & mask)
-                  break;
-               else
-                  mask = mask>>1;
+   // note: since slot value is made sl1, RAR can be sent at all slots
+   uint16_t mask = 0x2000;
+   for(firstSymbol=0; firstSymbol<14;firstSymbol++)
+   {
+      if(initialBwp->pdcchCommon.commonSearchSpace.monitoringSymbol & mask)
+        break;
+      else
+        mask = mask>>1;
    }
 
    /* calculate the PRBs */
@@ -316,22 +316,22 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of
    pdcch->dci.beamPdcchInfo.prg[0].beamIdx[0] = 0;
    pdcch->dci.txPdcchPower.powerValue = 0;
    pdcch->dci.txPdcchPower.powerControlOffsetSS = 0;
-       pdcch->dci.pdschCfg = pdsch;
+   pdcch->dci.pdschCfg = pdsch;
 
    /* fill the PDSCH PDU */
-       uint8_t cwCount = 0;
+   uint8_t cwCount = 0;
    pdsch->pduBitmap = 0; /* PTRS and CBG params are excluded */
    pdsch->rnti = raRnti; /* RA-RNTI */
    pdsch->pduIndex = 0;
    pdsch->numCodewords = 1;
-       for(cwCount = 0; cwCount < pdsch->numCodewords; cwCount++)
-       {
+   for(cwCount = 0; cwCount < pdsch->numCodewords; cwCount++)
+   {
       pdsch->codeword[cwCount].targetCodeRate = 308;
       pdsch->codeword[cwCount].qamModOrder = 2;
       pdsch->codeword[cwCount].mcsIndex = mcs; /* mcs configured to 4 */
       pdsch->codeword[cwCount].mcsTable = 0;   /* notqam256 */
       pdsch->codeword[cwCount].rvIndex = 0;
-               tbSize = schCalcTbSize(10); /* 8 bytes RAR and 2 bytes padding */
+      tbSize = schCalcTbSize(10); /* 8 bytes RAR and 2 bytes padding */
       pdsch->codeword[cwCount].tbSize = tbSize;
    }
    pdsch->dataScramblingId = pci;
@@ -344,9 +344,9 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of
    pdsch->dmrs.scid = 0;
    pdsch->dmrs.numDmrsCdmGrpsNoData = 1;
    pdsch->dmrs.dmrsPorts = 0;
-       pdsch->dmrs.mappingType      = DMRS_MAP_TYPE_A;  /* Type-A */
-       pdsch->dmrs.nrOfDmrsSymbols  = NUM_DMRS_SYMBOLS;
-       pdsch->dmrs.dmrsAddPos       = DMRS_ADDITIONAL_POS;
+   pdsch->dmrs.mappingType      = DMRS_MAP_TYPE_A;  /* Type-A */
+   pdsch->dmrs.nrOfDmrsSymbols  = NUM_DMRS_SYMBOLS;
+   pdsch->dmrs.dmrsAddPos       = DMRS_ADDITIONAL_POS;
    pdsch->pdschFreqAlloc.resourceAllocType = 1; /* RAT type-1 RIV format */
    pdsch->pdschFreqAlloc.freqAlloc.startPrb = offset + SCH_SSB_NUM_PRB; /* the RB numbering starts from coreset0, and PDSCH is always above SSB */ 
    pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize,mcs,numPdschSymbols);
@@ -360,8 +360,8 @@ uint8_t schFillRar(RarAlloc *rarAlloc, uint16_t raRnti, uint16_t pci, uint8_t of
    pdsch->beamPdschInfo.prg[0].beamIdx[0] = 0;
    pdsch->txPdschPower.powerControlOffset = 0;
    pdsch->txPdschPower.powerControlOffsetSS = 0;
-       
-       return ROK;
+
+   return ROK;
 }
 
 /**********************************************************************
index f2c9c84..7e4b59a 100644 (file)
@@ -467,8 +467,8 @@ uint8_t pucchResourceSet[MAX_PUCCH_RES_SET_IDX][4] = {
  *     
  *     This function finds the TBSize from table Table 5.1.3.2-1 spec 38.214
  *     
- *  @param[in]  payLoadSize - size of payload
- *  @return     TBsize from the Table
+ *  @param[in]  payLoadSize - size of payload in bytes
+ *  @return     TBsize from the Table in bytes
  **/
 uint16_t schCalcTbSize(uint16_t payLoadSize)
 {
@@ -481,7 +481,7 @@ uint16_t schCalcTbSize(uint16_t payLoadSize)
    }
 
    /* return the TBsize in bytes */
-   return (tbSizeTable[tbsIndex]);
+   return (tbSizeTable[tbsIndex]/8);
 }
 
 /**
@@ -493,7 +493,7 @@ uint16_t schCalcTbSize(uint16_t payLoadSize)
  *     
  *     This function calculates the number of PRbs 
  *     
- *  @param[in]  tbSize
+ *  @param[in]  tbSize in bytes
  *  @param[in]  mcs
  *  @param[in]  number of symbols
  *  @return   number PRBs
@@ -507,6 +507,8 @@ uint16_t schCalcNumPrb(uint16_t tbSize, uint16_t mcs, uint8_t numSymbols)
    uint16_t rValue = mcsTable[mcs][2];
    uint8_t  numLayer = 1;       /* v value */
 
+   tbSize = tbSize * 8; //Calculate tbSize in bits
+
    /* formula used for calculation of rbSize, 38.213 section 5.1.3.2 *
     * Ninfo = Nre . R . Qm . v                                       *
     * Nre' = Nsc . NsymPdsch - NdmrsSymb - Noh                       *