From b54c32b70d85e8f96a80c178c6311ceffb33812e Mon Sep 17 00:00:00 2001
From: "masayuki.harada" <masayuki.harada@jp.fujitsu.com>
Date: Tue, 21 Jul 2020 18:41:42 +0900
Subject: [PATCH] Change UL DCI aggregation level by DL cqi.

(cherry picked from commit 175c59ae3aedf612777cd1c8c88b6d6f254b9334)
---
 openair2/LAYER2/MAC/eNB_scheduler_fairRR.c | 39 ++++++++++++++++++++--
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index 5e4810e57a..7e68349e47 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -2312,6 +2312,18 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       }
     }
 
+    if (mac_eNB_get_rrc_status(module_idP, rnti) == RRC_HO_EXECUTION) {
+      aggregation = 4;
+      
+        if(get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0)>4)
+          aggregation = get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+    }else{
+      //aggregation = 2;
+      aggregation = get_aggregation(get_bw_index(module_idP, CC_id),
+                                    UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],
+                                    format0);
+    }
+
     cc = &eNB->common_channels[CC_id];
     //harq_pid
     harq_pid = subframe2harqpid(cc,(frameP+(sched_subframeP<subframeP ? 1 : 0)),sched_subframeP);
@@ -2416,10 +2428,19 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       }
 
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
-      format_flag = 2;
       rnti = UE_RNTI(module_idP,first_ue_id[CC_id][temp]);
+      format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_info->UE_sched_ctrl[first_ue_id[CC_id][temp]].dl_cqi[CC_id],format0);
-
+      if (mac_eNB_get_rrc_status(module_idP, rnti) == RRC_HO_EXECUTION) {
+        aggregation = 4;
+    
+        if(get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0)>4)
+          aggregation = get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+      }else {
+        aggregation = get_aggregation(get_bw_index(module_idP, CC_id),
+                                    UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],
+                                    format0);
+      }
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         break;
@@ -2498,6 +2519,9 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
 
+      aggregation = get_aggregation(get_bw_index(module_idP, CC_id),
+                                    UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],
+                                    format0);
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -3112,7 +3136,16 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       UE_sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
       harq_pid      = subframe2harqpid(cc,sched_frame,sched_subframeP);
       rnti = UE_RNTI(CC_id,UE_id);
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+      if (mac_eNB_get_rrc_status(module_idP, rnti) == RRC_HO_EXECUTION) {
+        aggregation = 4;
+        if(get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0)>4)
+          aggregation = get_aggregation(get_bw_index(module_idP, CC_id),UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+      }else{
+        //aggregation = 2;
+        aggregation = get_aggregation(get_bw_index(module_idP, CC_id),
+                                      UE_info->UE_sched_ctrl[UE_id].dl_cqi[CC_id],
+                                      format0);
+      }
       LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n",
             module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL);
       int bytes_to_schedule = UE_template->estimated_ul_buffer - UE_template->scheduled_ul_bytes;
-- 
2.26.2