diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 7deb8e8da73f0d15c3318a16652decb736cfdd2b..27c2cabf33c20e69c798017af725ec66d4353be7 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1224,7 +1224,7 @@ int fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_ } - LOG_I(PHY,"DCI: Set harq_ids[%d] to %d\n",subframe,rel8->harq_process); + LOG_I(PHY,"DCI: Set harq_ids[%d] to %d (%p)\n",subframe,rel8->harq_process,dlsch0); dlsch0->harq_ids[subframe] = rel8->harq_process; @@ -2275,6 +2275,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->hopping; ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_1_5MHz_TDD_1_6_t; } else { ((DCI0_1_5MHz_FDD_t *)dci_pdu)->cqi_req = cqi_req; ((DCI0_1_5MHz_FDD_t *)dci_pdu)->cshift = cshift; @@ -2284,6 +2285,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_1_5MHz_FDD_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->hopping; ((DCI0_1_5MHz_FDD_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_1_5MHz_FDD_t; } break; @@ -2299,6 +2301,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->hopping; ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_5MHz_TDD_1_6_t; } else { ((DCI0_5MHz_FDD_t *)dci_pdu)->cqi_req = cqi_req; ((DCI0_5MHz_FDD_t *)dci_pdu)->cshift = cshift; @@ -2308,6 +2311,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_5MHz_FDD_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_5MHz_FDD_t *)dci_pdu)->hopping; ((DCI0_5MHz_FDD_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_5MHz_FDD_t; } break; @@ -2323,6 +2327,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->hopping; ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_10MHz_TDD_1_6_t; } else { ((DCI0_10MHz_FDD_t *)dci_pdu)->cqi_req = cqi_req; ((DCI0_10MHz_FDD_t *)dci_pdu)->cshift = cshift; @@ -2332,6 +2337,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_10MHz_FDD_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_10MHz_FDD_t *)dci_pdu)->hopping; ((DCI0_10MHz_FDD_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_10MHz_FDD_t; } break; @@ -2347,6 +2353,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->hopping; ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_20MHz_TDD_1_6_t; } else { ((DCI0_20MHz_FDD_t *)dci_pdu)->cqi_req = cqi_req; ((DCI0_20MHz_FDD_t *)dci_pdu)->cshift = cshift; @@ -2356,6 +2363,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, ((DCI0_20MHz_FDD_t *)dci_pdu)->rballoc = rballoc; // hopping = ((DCI0_20MHz_FDD_t *)dci_pdu)->hopping; ((DCI0_20MHz_FDD_t *)dci_pdu)->type = 0; + dci_alloc->dci_length = sizeof_DCI0_20MHz_FDD_t; } //printf("eNB: rb_alloc (20 MHz dci) %d\n",rballoc); diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 14ffc6a5dc077ff08664b960c8b5979fce8d9307..9339e14595a31d83049148501bc87485b4aeedb9 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -329,7 +329,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, int input_buffer_length = dlsch_harq->TBS/8; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - if (frame < 20) { + if (frame < 200) { LOG_I(PHY, "[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", pdsch_start %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n", @@ -1283,286 +1283,6 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, } - -void process_HARQ_feedback(uint8_t UE_id, - PHY_VARS_eNB *eNB, - eNB_rxtx_proc_t *proc, - uint8_t pusch_flag, - uint8_t *pucch_payload, - uint8_t pucch_sel, - uint8_t SR_payload) -{ - - LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - uint8_t dl_harq_pid[8],dlsch_ACK[8],dl_subframe; - LTE_eNB_DLSCH_t *dlsch = eNB->dlsch[(uint32_t)UE_id][0]; - LTE_eNB_UE_stats *ue_stats = &eNB->UE_stats[(uint32_t)UE_id]; - LTE_DL_eNB_HARQ_t *dlsch_harq_proc; - uint8_t subframe_m4,M,m; - int mp; - int all_ACKed=1,nb_alloc=0,nb_ACK=0; - int frame = proc->frame_rx; - int subframe = proc->subframe_rx; - int harq_pid = subframe2harq_pid( fp,frame,subframe); - - nfapi_harq_indication_pdu_t *pdu; - - if (fp->frame_type == FDD) { //FDD - subframe_m4 = (subframe<4) ? subframe+6 : subframe-4; - - dl_harq_pid[0] = dlsch->harq_ids[subframe_m4]; - M=1; - - if (pusch_flag == 1) { - dlsch_ACK[0] = eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]; - if (dlsch->subframe_tx[subframe_m4]==1) - LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d on PUSCH for subframe %d\n",eNB->Mod_id, - frame,dlsch_ACK[0],subframe_m4); - } - else { - dlsch_ACK[0] = pucch_payload[0]; - LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d on PUCCH for subframe %d\n",eNB->Mod_id, - frame,dlsch_ACK[0],subframe_m4); - /* - if (dlsch_ACK[0]==0) - AssertFatal(0,"Exiting on NAK on PUCCH\n"); - */ - } - - // fill ACK/NAK Indication - pdu = &eNB->UL_INFO.harq_ind.harq_pdu_list[eNB->UL_INFO.harq_ind.number_of_harqs]; - eNB->UL_INFO.harq_ind.number_of_harqs++; - -#if defined(MESSAGE_CHART_GENERATOR_PHY) - MSC_LOG_RX_MESSAGE( - MSC_PHY_ENB,MSC_PHY_UE, - NULL,0, - "%05u:%02u %s received %s rnti %x harq id %u tx SF %u", - frame,subframe, - (pusch_flag == 1)?"PUSCH":"PUCCH", - (dlsch_ACK[0])?"ACK":"NACK", - dlsch->rnti, - dl_harq_pid[0], - subframe_m4 - ); -#endif - } else { // TDD Handle M=1,2 cases only - - M=ul_ACK_subframe2_M(fp, - subframe); - - // Now derive ACK information for TDD - if (pusch_flag == 1) { // Do PUSCH ACK/NAK first - // detect missing DAI - //FK: this code is just a guess - //RK: not exactly, yes if scheduled from PHICH (i.e. no DCI format 0) - // otherwise, it depends on how many of the PDSCH in the set are scheduled, we can leave it like this, - // but we have to adapt the code below. For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used - - dlsch_ACK[0] = eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]; - dlsch_ACK[1] = (eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode == bundling) - ?eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]:eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[1]; - } - - - else { // PUCCH ACK/NAK - if ((SR_payload == 1)&&(pucch_sel!=2)) { // decode Table 7.3 if multiplexing and SR=1 - nb_ACK = 0; - - if (M == 2) { - if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1)) // b[0],b[1] - nb_ACK = 1; - else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0)) - nb_ACK = 2; - } else if (M == 3) { - if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1)) - nb_ACK = 1; - else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0)) - nb_ACK = 2; - else if ((pucch_payload[0] == 0) && (pucch_payload[1] == 1)) - nb_ACK = 3; - } - } else if (pucch_sel == 2) { // bundling or M=1 - dlsch_ACK[0] = pucch_payload[0]; - dlsch_ACK[1] = pucch_payload[0]; - } else { // multiplexing with no SR, this is table 10.1 - if (M==1) - dlsch_ACK[0] = pucch_payload[0]; - else if (M==2) { - if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) || - ((pucch_sel == 0) && (pucch_payload[0] == 0) && (pucch_payload[1] == 1))) - dlsch_ACK[0] = 1; - else - dlsch_ACK[0] = 0; - - if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) || - ((pucch_sel == 1) && (pucch_payload[0] == 0) && (pucch_payload[1] == 0))) - dlsch_ACK[1] = 1; - else - dlsch_ACK[1] = 0; - } - } - } - } - - // handle case where positive SR was transmitted with multiplexing - if ((SR_payload == 1)&&(pucch_sel!=2)&&(pusch_flag == 0)) { - nb_alloc = 0; - - for (m=0; m<M; m++) { - dl_subframe = ul_ACK_subframe2_dl_subframe(fp, - subframe, - m); - - if (dlsch->subframe_tx[dl_subframe]==1) - nb_alloc++; - } - - if (nb_alloc == nb_ACK) - all_ACKed = 1; - else - all_ACKed = 0; - } - - - for (m=0,mp=-1; m<M; m++) { - - dl_subframe = ul_ACK_subframe2_dl_subframe(fp, - subframe, - m); - if (dlsch->subframe_tx[dl_subframe]==1) { - if (pusch_flag == 1) - mp++; - else - mp = m; - - dl_harq_pid[m] = dlsch->harq_ids[dl_subframe]; - harq_pid_updated[UE_id][dl_harq_pid[m]] = 1; - - if ((pucch_sel != 2)&&(pusch_flag == 0)) { // multiplexing - if ((SR_payload == 1)&&(all_ACKed == 1)) - dlsch_ACK[m] = 1; - else - dlsch_ACK[m] = 0; - } - - if (dl_harq_pid[m]<dlsch->Mdlharq) { - dlsch_harq_proc = dlsch->harq_processes[dl_harq_pid[m]]; -#ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d][PDSCH %x/%d] subframe %d, status %d, round %d (rv %d, TBS %d)\n",eNB->Mod_id, - dlsch->rnti,dl_harq_pid[m],dl_subframe, - dlsch_harq_proc->status,dlsch_harq_proc->round, - dlsch->harq_processes[dl_harq_pid[m]]->rvidx, - dlsch->harq_processes[dl_harq_pid[m]]->TBS); - - if (dlsch_harq_proc->status==DISABLED) - LOG_E(PHY,"dlsch_harq_proc is disabled? \n"); - -#endif - - if ((dl_harq_pid[m]<dlsch->Mdlharq) && - (dlsch_harq_proc->status == ACTIVE)) { - // dl_harq_pid of DLSCH is still active - - if ( dlsch_ACK[mp]==0) { - // Received NAK -#ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d][PDSCH %x/%d] M = %d, m= %d, mp=%d NAK Received in round %d, requesting retransmission\n",eNB->Mod_id, - dlsch->rnti,dl_harq_pid[m],M,m,mp,dlsch_harq_proc->round); -#endif - - T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(UE_id), T_INT(dlsch->rnti), - T_INT(dl_harq_pid[m])); - - if (dlsch_harq_proc->round == 0) - ue_stats->dlsch_NAK_round0++; - - ue_stats->dlsch_NAK[dl_harq_pid[m]][dlsch_harq_proc->round]++; - - - // then Increment DLSCH round index - dlsch_harq_proc->round++; - - - if (dlsch_harq_proc->round == dlsch->Mlimit) { - // This was the last round for DLSCH so reset round and increment l2_error counter -#ifdef DEBUG_PHY_PROC - LOG_W(PHY,"[eNB %d][PDSCH %x/%d] DLSCH retransmissions exhausted, dropping packet\n",eNB->Mod_id, - dlsch->rnti,dl_harq_pid[m]); -#endif -#if defined(MESSAGE_CHART_GENERATOR_PHY) - MSC_LOG_EVENT(MSC_PHY_ENB, "0 HARQ DLSCH Failed RNTI %"PRIx16" round %u", - dlsch->rnti, - dlsch_harq_proc->round); -#endif - - dlsch_harq_proc->round = 0; - ue_stats->dlsch_l2_errors[dl_harq_pid[m]]++; - dlsch_harq_proc->status = SCH_IDLE; - dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq; - } - } else { -#ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d][PDSCH %x/%d] ACK Received in round %d, resetting process\n",eNB->Mod_id, - dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round); -#endif - - T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(UE_id), T_INT(dlsch->rnti), - T_INT(dl_harq_pid[m])); - - ue_stats->dlsch_ACK[dl_harq_pid[m]][dlsch_harq_proc->round]++; - - // Received ACK so set round to 0 and set dlsch_harq_pid IDLE - dlsch_harq_proc->round = 0; - dlsch_harq_proc->status = SCH_IDLE; - dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq; - - ue_stats->total_TBS = ue_stats->total_TBS + - eNB->dlsch[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS; - /* - ue_stats->total_transmitted_bits = ue_stats->total_transmitted_bits + - eNB->dlsch[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS; - */ - } - - // Do fine-grain rate-adaptation for DLSCH - if (ue_stats->dlsch_NAK_round0 > dlsch->error_threshold) { - if (ue_stats->dlsch_mcs_offset == 1) - ue_stats->dlsch_mcs_offset=0; - else - ue_stats->dlsch_mcs_offset=-1; - } - -#ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[process_HARQ_feedback] Frame %d Setting round to %d for pid %d (subframe %d)\n",frame, - dlsch_harq_proc->round,dl_harq_pid[m],subframe); -#endif - harq_pid_round[UE_id][dl_harq_pid[m]] = dlsch_harq_proc->round; - // Clear NAK stats and adjust mcs offset - // after measurement window timer expires - if (ue_stats->dlsch_sliding_cnt == dlsch->ra_window_size) { - if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK_round0 < 2)) - ue_stats->dlsch_mcs_offset = 1; - - if ((ue_stats->dlsch_mcs_offset == 1) && (ue_stats->dlsch_NAK_round0 > 2)) - ue_stats->dlsch_mcs_offset = 0; - - if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK_round0 > 2)) - ue_stats->dlsch_mcs_offset = -1; - - if ((ue_stats->dlsch_mcs_offset == -1) && (ue_stats->dlsch_NAK_round0 < 2)) - ue_stats->dlsch_mcs_offset = 0; - - ue_stats->dlsch_NAK_round0 = 0; - ue_stats->dlsch_sliding_cnt = 0; - } - } - } - } - } -} - - void prach_procedures(PHY_VARS_eNB *eNB, #ifdef Rel14 int br_flag @@ -2702,8 +2422,8 @@ void fill_ulsch_cqi_indication(PHY_VARS_eNB *eNB,uint16_t frame,uint8_t subframe void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,uint16_t rnti, int frame,int subframe,int bundling) { - int UE_id; - + int UE_id = find_dlsch(rnti,eNB,SEARCH_EXIST); + AssertFatal(UE_id>=0,"UE_id doesn't exist\n"); pthread_mutex_lock(&eNB->UL_INFO_mutex); nfapi_harq_indication_pdu_t *pdu = &eNB->UL_INFO.harq_ind.harq_pdu_list[eNB->UL_INFO.harq_ind.number_of_harqs]; @@ -2756,7 +2476,7 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq, void fill_uci_harq_indication(PHY_VARS_eNB *eNB,LTE_eNB_UCI *uci,int frame,int subframe,uint8_t *harq_ack,uint8_t tdd_mapping_mode,uint16_t tdd_multiplexing_mask) { - int UE_id,i; + int UE_id=find_dlsch(uci->rnti,eNB,SEARCH_EXIST),i; pthread_mutex_lock(&eNB->UL_INFO_mutex); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index 99604b290dd7ee84d17fa50e3ef858b60dbccdb0..760ff0149dc30e642fb42272916aec575cc9c82a 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -872,7 +872,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t lcid=0; - // set HARQ process 0 round to 0 for this UE + // put HARQ process 0 round to IDLE if (cc->tdd_Config) harq_pid = ((frameP*10)+subframeP)%10; else harq_pid = ((frameP*10)+subframeP)&7; UE_list->UE_sched_ctrl[UE_id].round[CC_idP][harq_pid] = 0; @@ -1010,7 +1010,6 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP, // check HARQ status and retransmit if necessary - // Get candidate harq_pid from PHY UE_id = find_UE_id(module_idP,RA_template->rnti); AssertFatal(UE_id>=0,"Can't find UE for t-crnti\n"); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index ebd880da12a8aa8e48e498b4dd67e0328b8bf670..e7fa27702a7a67239e9ad158ee8f6812a8d8e0a7 100755 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -648,7 +648,7 @@ schedule_ue_spec( /* process retransmission */ - if (round > 0) { + if (round != 8) { // get freq_allocation nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; @@ -760,6 +760,8 @@ schedule_ue_spec( 0 // number of beamforming vectors, not used here ); + LOG_I(MAC,"Filled NFAPI configuration for DCI/DLSCH %d, retransmission round %d\n",eNB->pdu_index[CC_id],round); + eNB->pdu_index[CC_id]++; program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); // No TX request for retransmission (check if null request for FAPI) @@ -1202,16 +1204,19 @@ schedule_ue_spec( dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_2 = 1; if (cc[CC_id].tdd_Config != NULL) { //TDD dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.downlink_assignment_index = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - LOG_D(MAC,"[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, dai %d, mcs %d\n", - module_idP,CC_id,harq_pid,round, + LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", + module_idP,CC_id,harq_pid, (UE_list->UE_template[CC_id][UE_id].DAI-1), mcs); } else { - LOG_D(MAC,"[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, mcs %d\n", - module_idP,CC_id,harq_pid,round,mcs); + LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", + module_idP,CC_id,harq_pid,mcs); } if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,rnti)) { + + + ue_sched_ctl->round[CC_id][harq_pid] = 0; dl_req->number_dci++; dl_req->number_pdu++; @@ -1256,9 +1261,11 @@ schedule_ue_spec( &eNB->pdu_index[CC_id], eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[harq_pid]); + LOG_I(MAC,"Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n",eNB->pdu_index[CC_id]); + eNB->pdu_index[CC_id]++; program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); - + } else { LOG_W(MAC,"Frame %d, Subframe %d: Dropping DLSCH allocation for UE %d/%x, infeasible CCE allocations\n", diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index dea0a91481a7972436f0383e6278784be4226aea..c942ec022e6fe0770f7c9d897ef2abf6bf20e7dd 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -1636,6 +1636,7 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP for (j=0; j<8; j++) { UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j==0)?1:0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0 UE_list->UE_template[cc_idP][UE_id].oldNDI_UL[j] = (j==harq_pidP)?0:1; // 1st transmission is with Msg3; + UE_list->UE_sched_ctrl[UE_id].round[cc_idP][j] = 8; } eNB_ulsch_info[mod_idP][cc_idP][UE_id].status = S_UL_WAITING;