From 0bcee1e40ede03f022e76ed55e70e691f8055990 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Sat, 11 Feb 2017 12:34:05 +0100
Subject: [PATCH] fix: set mcs, TBS and Qm only if round == 0

Not sure at all about this one, seemed necessary to me,
but I don't get the full logic in there.

To be refined.
---
 openair1/PHY/LTE_TRANSPORT/dci_tools.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index e38824861b..a905d386ef 100755
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -4712,8 +4712,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
       }
     }
 
-    dlsch0_harq->mcs         = mcs;
-
     // this a retransmission
     if(dlsch0_harq->round)
     {
@@ -4728,17 +4726,25 @@ int generate_ue_dlsch_params_from_dci(int frame,
         }
     }
 
-    dlsch0_harq->TBS         = TBStable[get_I_TBS(mcs)][NPRB-1];
-    if (mcs <= 28)
-      dlsch0_harq->Qm          = get_Qm(mcs);
-    else if (mcs<=31)
-      dlsch0_harq->Qm          = (mcs-28)<<1;
-    else
-      LOG_E(PHY,"invalid mcs %d\n",mcs);
     //    printf("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS);
 
     dlsch[0]->active = 1;
 
+    if (dlsch0_harq->round == 0) {
+      dlsch0_harq->status = ACTIVE;
+      //            printf("Setting DLSCH process %d to ACTIVE\n",harq_pid);
+      // MCS and TBS don't change across HARQ rounds
+      dlsch0_harq->mcs         = mcs;
+      dlsch0_harq->TBS         = TBStable[get_I_TBS(dlsch0_harq->mcs)][NPRB-1];
+
+      if (mcs <= 28)
+        dlsch0_harq->Qm          = get_Qm(mcs);
+      else if (mcs<=31)
+        dlsch0_harq->Qm          = (mcs-28)<<1;
+      else
+        LOG_E(PHY,"invalid mcs %d\n",mcs);
+    }
+
     dlsch[0]->rnti = rnti;
 
     if (beamforming_mode == 0)
-- 
GitLab