|
|
|
@@ -1893,10 +1893,11 @@ void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,u8 last_slot,u8 UE_id, u8 harq_pid) {
|
|
|
|
|
// this prepares the demodulation of the first PUSCH of a new user, containing Msg3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int frame = ((last_slot>>1)>=8 ? -1 : 0) + phy_vars_eNB->frame;
|
|
|
|
|
|
|
|
|
|
LOG_D(PHY,"[eNB %d][RAPROC] frame %d : subframe %d (last_slot %d): process_Msg3 UE_id %d (active %d, subframe %d, frame %d)\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,last_slot,
|
|
|
|
|
frame,last_slot>>1,last_slot,
|
|
|
|
|
UE_id,phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame);
|
|
|
|
@@ -1905,7 +1906,7 @@ void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,u8 last_slot,u8 UE_id, u8 harq_pid)
|
|
|
|
|
if ((phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active == 1) &&
|
|
|
|
|
((last_slot%2)==1) &&
|
|
|
|
|
(phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe == (last_slot>>1)) &&
|
|
|
|
|
(phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame == (phy_vars_eNB->frame))) {
|
|
|
|
|
(phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame == frame)) {
|
|
|
|
|
|
|
|
|
|
// harq_pid = 0;
|
|
|
|
|
|
|
|
|
@@ -1914,7 +1915,7 @@ void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,u8 last_slot,u8 UE_id, u8 harq_pid)
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag=1;
|
|
|
|
|
LOG_D(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d: Setting subframe_scheduling_flag (Msg3) for UE %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,last_slot,last_slot>>1,UE_id);
|
|
|
|
|
frame,last_slot,last_slot>>1,UE_id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1939,6 +1940,7 @@ void process_HARQ_feedback(u8 UE_id,
|
|
|
|
|
u8 subframe_m4,M,m;
|
|
|
|
|
int mp;
|
|
|
|
|
int all_ACKed=1,nb_alloc=0,nb_ACK=0;
|
|
|
|
|
int frame = ((subframe>=8) ? -1 : 0) + phy_vars_eNB->frame;
|
|
|
|
|
|
|
|
|
|
if (phy_vars_eNB->lte_frame_parms.frame_type == 0){ //FDD
|
|
|
|
|
subframe_m4 = (subframe<4) ? subframe+6 : subframe-4;
|
|
|
|
@@ -1950,7 +1952,7 @@ void process_HARQ_feedback(u8 UE_id,
|
|
|
|
|
else
|
|
|
|
|
dlsch_ACK[0] = pucch_payload[0];
|
|
|
|
|
LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d for subframe %d\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,dlsch_ACK[0],subframe_m4);
|
|
|
|
|
frame,dlsch_ACK[0],subframe_m4);
|
|
|
|
|
}
|
|
|
|
|
else { // TDD Handle M=1,2 cases only
|
|
|
|
|
|
|
|
|
@@ -2122,7 +2124,7 @@ void process_HARQ_feedback(u8 UE_id,
|
|
|
|
|
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",phy_vars_eNB->frame,
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
@@ -2161,10 +2163,11 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
|
|
|
|
|
LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms;
|
|
|
|
|
u8 nCCE0,nCCE1;
|
|
|
|
|
int sf;
|
|
|
|
|
int frame = ((subframe>=8) ? -1 : 0) + phy_vars_eNB->frame;
|
|
|
|
|
|
|
|
|
|
if (frame_parms->frame_type == FDD ) {
|
|
|
|
|
sf = (subframe<4) ? (subframe+6) : (subframe-4);
|
|
|
|
|
printf("n1_pucch_eNB: subframe %d, nCCE %d\n",sf,phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf]);
|
|
|
|
|
// printf("n1_pucch_eNB: subframe %d, nCCE %d\n",sf,phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf]);
|
|
|
|
|
|
|
|
|
|
if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[sf]>0) {
|
|
|
|
|
*n1_pucch0 = frame_parms->pucch_config_common.n1PUCCH_AN + phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf];
|
|
|
|
@@ -2234,7 +2237,7 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
|
|
|
|
|
else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d] frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
subframe,frame_parms->tdd_config);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@@ -2292,7 +2295,7 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d] Frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame,subframe,frame_parms->tdd_config);
|
|
|
|
|
phy_vars_eNB->Mod_id,frame,subframe,frame_parms->tdd_config);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@@ -2310,12 +2313,13 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
|
|
|
|
|
u16 preamble_max,preamble_energy_max;
|
|
|
|
|
u16 i;
|
|
|
|
|
s8 UE_id;
|
|
|
|
|
int frame = ((subframe)>=8 ? -1 : 0) + phy_vars_eNB->frame;
|
|
|
|
|
|
|
|
|
|
memset(&preamble_energy_list[0],0,64*sizeof(u16));
|
|
|
|
|
memset(&preamble_delay_list[0],0,64*sizeof(u16));
|
|
|
|
|
if (abstraction_flag == 0) {
|
|
|
|
|
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,subframe,dB_fixed(signal_energy(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],512)) - phy_vars_eNB->rx_total_gain_eNB_dB);
|
|
|
|
|
frame,subframe,dB_fixed(signal_energy(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],512)) - phy_vars_eNB->rx_total_gain_eNB_dB);
|
|
|
|
|
|
|
|
|
|
// LOG_I(PHY,"[eNB %d][RAPROC] PRACH: rootSequenceIndex %d, prach_ConfigIndex %d, zeroCorrelationZoneConfig %d, highSpeedFlag %d, prach_FreqOffset %d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex, phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset);
|
|
|
|
|
|
|
|
|
@@ -2323,7 +2327,7 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
|
|
|
|
|
subframe,
|
|
|
|
|
preamble_energy_list,
|
|
|
|
|
preamble_delay_list,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
0);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
@@ -2374,7 +2378,7 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
|
|
|
|
|
preamble_delay_list[preamble_max]);
|
|
|
|
|
#ifdef OPENAIR2
|
|
|
|
|
mac_xface->initiate_ra_proc(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
preamble_max,
|
|
|
|
|
preamble_delay_list[preamble_max],
|
|
|
|
|
0,subframe,0);
|
|
|
|
@@ -2382,7 +2386,7 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Unable to add user, max user count reached\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame, subframe);
|
|
|
|
|
phy_vars_eNB->Mod_id,frame, subframe);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -2412,6 +2416,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
u16 rnti=0;
|
|
|
|
|
u8 access_mode;
|
|
|
|
|
int num_active_cba_groups;
|
|
|
|
|
int frame = ((last_slot>>1)>=8 ? -1 : 0 )+ phy_vars_eNB->frame;
|
|
|
|
|
|
|
|
|
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX,1);
|
|
|
|
|
|
|
|
|
@@ -2422,7 +2427,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
// check if we have to detect PRACH first
|
|
|
|
|
if ((last_slot&1)==1){
|
|
|
|
|
// printf("Checking PRACH for eNB %d, subframe %d\n",phy_vars_eNB->Mod_id,last_slot>>1);
|
|
|
|
|
if (is_prach_subframe(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->frame,last_slot>>1)>0) {
|
|
|
|
|
if (is_prach_subframe(&phy_vars_eNB->lte_frame_parms,frame,last_slot>>1)>0) {
|
|
|
|
|
// printf("Running prach procedures\n");
|
|
|
|
|
prach_procedures(phy_vars_eNB,last_slot>>1,abstraction_flag);
|
|
|
|
|
}
|
|
|
|
@@ -2513,7 +2518,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
*/
|
|
|
|
|
// Check for active processes in current subframe
|
|
|
|
|
harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
|
|
|
|
|
((last_slot>>1)==9 ? -1 : 0 )+ phy_vars_eNB->frame,last_slot>>1);
|
|
|
|
|
frame,last_slot>>1);
|
|
|
|
|
// printf("[eNB][PUSCH] subframe %d => harq_pid %d\n",last_slot>>1,harq_pid);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@@ -2564,20 +2569,20 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
(((last_slot>>1)==9) ? -1 : 0)+phy_vars_eNB->frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->rnti);
|
|
|
|
|
frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->rnti);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1){
|
|
|
|
|
LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for Msg3 in Sector %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
(((last_slot>>1)==9)?-1:0)+phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
last_slot,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].sector);
|
|
|
|
|
} else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for UE %d Mode %s sect_id %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
(((last_slot>>1)==9)?-1:0)+phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
last_slot,last_slot>>1,
|
|
|
|
|
i,
|
|
|
|
|
mode_string[phy_vars_eNB->eNB_UE_stats[i].mode],
|
|
|
|
@@ -2591,7 +2596,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, Ndi %d, first_rb %d, nb_rb %d, mcs %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d \n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,(((last_slot>>1)==9)?-1:0)+phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round,
|
|
|
|
@@ -2647,7 +2652,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
|
|
|
|
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
|
|
|
|
|
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
|
|
|
|
@@ -2681,7 +2686,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
- phy_vars_eNB->rx_total_gain_eNB_dB;
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d] Frame %d subframe %d: ULSCH %d RX power (%d,%d) dB\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame,last_slot>>1,i,
|
|
|
|
|
phy_vars_eNB->Mod_id,frame,last_slot>>1,i,
|
|
|
|
|
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
|
|
|
|
|
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]));
|
|
|
|
|
#endif
|
|
|
|
@@ -2692,7 +2697,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d Clearing subframe_scheduling_flag\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->frame,last_slot>>1,i,harq_pid);
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid);
|
|
|
|
|
#endif
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
|
|
|
|
|
|
|
|
|
@@ -2718,7 +2723,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
|
|
|
|
|
LOG_D(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,last_slot,last_slot>>1, i,
|
|
|
|
|
frame,last_slot,last_slot>>1, i,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
|
|
|
|
|
phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx-1);
|
|
|
|
|
|
|
|
|
@@ -2729,7 +2734,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
|
|
|
|
#ifdef OPENAIR2
|
|
|
|
|
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].crnti);
|
|
|
|
|
#endif
|
|
|
|
|
remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
|
|
|
|
@@ -2743,7 +2748,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
get_Msg3_alloc_ret(&phy_vars_eNB->lte_frame_parms,
|
|
|
|
|
last_slot>>1,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
&phy_vars_eNB->ulsch_eNB[i]->Msg3_frame,
|
|
|
|
|
&phy_vars_eNB->ulsch_eNB[i]->Msg3_subframe);
|
|
|
|
|
}
|
|
|
|
@@ -2751,7 +2756,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
else { //normal ULSCH
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1, i,
|
|
|
|
|
frame,last_slot>>1, i,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->Mdlharq,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
|
|
|
|
@@ -2768,7 +2773,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round== phy_vars_eNB->ulsch_eNB[i]->Mdlharq) {
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d ULSCH Mdlharq %d reached\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1, i,
|
|
|
|
|
frame,last_slot>>1, i,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->Mdlharq);
|
|
|
|
|
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round=0;
|
|
|
|
@@ -2782,11 +2787,11 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
// If we've dropped the UE, go back to PRACH mode for this UE
|
|
|
|
|
if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) {
|
|
|
|
|
LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached, removing UE\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame,last_slot>>1, i);
|
|
|
|
|
phy_vars_eNB->Mod_id,frame,last_slot>>1, i);
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
|
|
|
|
#ifdef OPENAIR2
|
|
|
|
|
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].crnti);
|
|
|
|
|
#endif
|
|
|
|
|
remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
|
|
|
|
@@ -2797,7 +2802,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1);
|
|
|
|
|
frame,last_slot>>1);
|
|
|
|
|
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
|
|
|
|
@@ -2809,10 +2814,10 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,harq_pid,i);
|
|
|
|
|
frame,harq_pid,i);
|
|
|
|
|
#endif
|
|
|
|
|
mac_xface->terminate_ra_proc(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
|
|
|
@@ -2822,7 +2827,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->Msg3_flag = 0;
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,last_slot>>1,i);
|
|
|
|
|
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,frame,last_slot>>1,i);
|
|
|
|
|
#endif //DEBUG_PHY_PROC
|
|
|
|
|
|
|
|
|
|
for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) {
|
|
|
|
@@ -2836,7 +2841,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
#ifdef DEBUG_ULSCH
|
|
|
|
|
LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,last_slot>>1,
|
|
|
|
|
harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
|
|
|
|
for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
|
|
|
|
|
LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
|
|
|
|
@@ -2848,7 +2853,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef OPENAIR2
|
|
|
|
|
// if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->calibration_flag == 0) {
|
|
|
|
|
mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
|
|
|
@@ -2871,7 +2876,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d] frame %d, slot %d: user %d in sector %d: timing advance = %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame, last_slot,
|
|
|
|
|
frame, last_slot,
|
|
|
|
|
i, sect_id,
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].timing_advance_update);
|
|
|
|
|
#endif
|
|
|
|
@@ -2883,7 +2888,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d, Processing HARQ feedback for UE %d (after PUSCH)\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
i);
|
|
|
|
|
#endif
|
|
|
|
|
process_HARQ_feedback(i,
|
|
|
|
@@ -2896,7 +2901,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
//#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d] Frame %d subframe %d, sect %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->Mod_id,frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].sector,
|
|
|
|
|
harq_pid,
|
|
|
|
|
i,
|
|
|
|
@@ -2909,7 +2914,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
//#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (phy_vars_eNB->frame % 100 == 0) {
|
|
|
|
|
if (frame % 100 == 0) {
|
|
|
|
|
if ((phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round] -
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round]) != 0)
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[harq_pid][round] =
|
|
|
|
@@ -2948,7 +2953,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR);
|
|
|
|
|
|
|
|
|
|
if ((n1_pucch0==-1) && (n1_pucch1==-1) && (do_SR==0)) { // no TX PDSCH that have to be checked and no SR for this UE_id
|
|
|
|
@@ -2978,13 +2983,13 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
&SR_payload,
|
|
|
|
|
last_slot>>1);
|
|
|
|
|
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,phy_vars_eNB->frame,last_slot>>1,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (SR_payload == 1) {
|
|
|
|
|
LOG_I(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,phy_vars_eNB->frame,last_slot>>1);
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].sr_received++;
|
|
|
|
|
if (phy_vars_eNB->first_sr[i] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
|
|
|
|
|
phy_vars_eNB->first_sr[i] = 0;
|
|
|
|
@@ -2992,11 +2997,11 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->status=SCH_IDLE;
|
|
|
|
|
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,phy_vars_eNB->frame,last_slot>>1);
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
|
|
|
|
|
}
|
|
|
|
|
#ifdef OPENAIR2
|
|
|
|
|
mac_xface->SR_indication(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
@@ -3029,7 +3034,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
pucch_payload0[0],metric0);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@@ -3062,7 +3067,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
|
|
|
|
|
#endif
|
|
|
|
|
if (abstraction_flag == 0)
|
|
|
|
@@ -3089,7 +3094,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
|
|
|
|
|
#endif
|
|
|
|
|
metric0=0;
|
|
|
|
@@ -3163,7 +3168,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)\n",phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
metric0,metric1,pucch_sel,pucch_payload[0],pucch_payload[1]);
|
|
|
|
|
#endif
|
|
|
|
|
process_HARQ_feedback(i,last_slot>>1,phy_vars_eNB,
|
|
|
|
@@ -3177,7 +3182,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
|
|
|
|
|
#endif //PUCCH
|
|
|
|
|
|
|
|
|
|
if ((phy_vars_eNB->frame % 10 == 0) && (last_slot==9)) {
|
|
|
|
|
if ((frame % 10 == 0) && (last_slot==9)) {
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].dlsch_bitrate = (phy_vars_eNB->eNB_UE_stats[i].total_TBS -
|
|
|
|
|
phy_vars_eNB->eNB_UE_stats[i].total_TBS_last)*10;
|
|
|
|
|
|
|
|
|
@@ -3202,7 +3207,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Checking PUSCH/ULSCH CBA Reception for UE %d with cba rnti %x mode %s\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
(((last_slot>>1)==9) ? -1 : 0)+phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
i, (u16)phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups],mode_string[phy_vars_eNB->eNB_UE_stats[i].mode]);
|
|
|
|
|
#endif
|
|
|
|
|
if (abstraction_flag==0) {
|
|
|
|
@@ -3260,7 +3265,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
(phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->num_active_cba_groups> 0)) {
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the subframe_scheduling_flag for Ue %d cba groups %d members\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->frame,last_slot>>1,i,harq_pid,
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid,
|
|
|
|
|
i+num_active_cba_groups, i%phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups);
|
|
|
|
|
#endif
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=1;
|
|
|
|
@@ -3277,7 +3282,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
else {
|
|
|
|
|
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
|
|
|
|
|
phy_vars_eNB->Mod_id,harq_pid,
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1);
|
|
|
|
|
frame,last_slot>>1);
|
|
|
|
|
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
|
|
|
|
@@ -3286,7 +3291,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#ifdef DEBUG_PHY_PROC
|
|
|
|
|
#ifdef DEBUG_ULSCH
|
|
|
|
|
LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",
|
|
|
|
|
phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
frame,last_slot>>1,
|
|
|
|
|
harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
|
|
|
|
for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
|
|
|
|
|
LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
|
|
|
|
@@ -3295,23 +3300,23 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
|
|
|
|
#endif
|
|
|
|
|
if (access_mode > UNKNOWN_ACCESS){
|
|
|
|
|
LOG_I(PHY,"[eNB %d] Frame %d, Subframe %d : received ULSCH SDU from CBA transmission, UE (%d,%x), CBA (group %d, rnti %x)\n",
|
|
|
|
|
phy_vars_eNB->Mod_id, phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->Mod_id, frame,last_slot>>1,
|
|
|
|
|
i, phy_vars_eNB->ulsch_eNB[i]->rnti,
|
|
|
|
|
i % phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups, phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups]);
|
|
|
|
|
// detect if there is a CBA collision
|
|
|
|
|
if (phy_vars_eNB->cba_last_reception[i%num_active_cba_groups] == 0 ) {
|
|
|
|
|
mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
|
|
|
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
|
|
|
|
phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]=1;//(last_slot>>1);
|
|
|
|
|
} else {
|
|
|
|
|
LOG_N(PHY,"[eNB %d] Frame %d subframe %d : CBA collision detected for UE%d for group %d, set the SR for this UE \n ",
|
|
|
|
|
phy_vars_eNB->Mod_id,phy_vars_eNB->frame,last_slot>>1,
|
|
|
|
|
phy_vars_eNB->Mod_id,frame,last_slot>>1,
|
|
|
|
|
i,i%num_active_cba_groups );
|
|
|
|
|
mac_xface->SR_indication(phy_vars_eNB->Mod_id,
|
|
|
|
|
phy_vars_eNB->frame,
|
|
|
|
|
frame,
|
|
|
|
|
phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|