put 50 PRB back in default enb configuration. added handling of UE release in L1/L2. detection of stale ULSCH configuration
This commit is contained in:
@@ -2402,7 +2402,9 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
||||
uint8_t UE_id;
|
||||
|
||||
AssertFatal((UE_id=find_ulsch(ulsch_pdu->ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0,
|
||||
"No existing UE ULSCH for rnti %x\n",ulsch_pdu->ulsch_pdu_rel8.rnti);
|
||||
"No existing/free UE ULSCH for rnti %x\n",ulsch_pdu->ulsch_pdu_rel8.rnti);
|
||||
|
||||
boolean_t new_ulsch = (find_ulsch(ulsch_pdu->ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST)==-1) ? TRUE : FALSE;
|
||||
|
||||
LTE_eNB_ULSCH_t *ulsch=eNB->ulsch[UE_id];
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
|
||||
@@ -2414,6 +2416,7 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
||||
|
||||
ulsch->harq_processes[harq_pid]->frame = frame;
|
||||
ulsch->harq_processes[harq_pid]->subframe = subframe;
|
||||
ulsch->harq_processes[harq_pid]->handled = 0;
|
||||
|
||||
ulsch->harq_processes[harq_pid]->first_rb = ulsch_pdu->ulsch_pdu_rel8.resource_block_start;
|
||||
ulsch->harq_processes[harq_pid]->nb_rb = ulsch_pdu->ulsch_pdu_rel8.number_of_resource_blocks;
|
||||
@@ -2457,7 +2460,8 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
||||
ulsch->harq_processes[harq_pid]->O_ACK = 0;
|
||||
|
||||
if ((ulsch->harq_processes[harq_pid]->status == SCH_IDLE) ||
|
||||
(ulsch->harq_processes[harq_pid]->ndi != ulsch_pdu->ulsch_pdu_rel8.new_data_indication)){
|
||||
(ulsch->harq_processes[harq_pid]->ndi != ulsch_pdu->ulsch_pdu_rel8.new_data_indication) ||
|
||||
(new_ulsch == TRUE)){
|
||||
ulsch->harq_processes[harq_pid]->status = ACTIVE;
|
||||
|
||||
ulsch->harq_processes[harq_pid]->TBS = ulsch_pdu->ulsch_pdu_rel8.size<<3;
|
||||
@@ -2475,8 +2479,8 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
||||
else ulsch->harq_processes[harq_pid]->round++;
|
||||
|
||||
ulsch->rnti = ulsch_pdu->ulsch_pdu_rel8.rnti;
|
||||
LOG_D(PHY,"Filling ULSCH %x for Frame %d, Subframe %d : harq_pid %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
|
||||
ulsch->rnti,
|
||||
LOG_D(PHY,"Filling ULSCH %x (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
|
||||
ulsch->rnti, new_ulsch,
|
||||
frame,
|
||||
subframe,
|
||||
harq_pid,
|
||||
|
||||
@@ -400,6 +400,8 @@ typedef struct {
|
||||
uint8_t subframe;
|
||||
/// Frame for reception
|
||||
uint32_t frame;
|
||||
/// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around
|
||||
uint8_t handled;
|
||||
/// PHICH active flag
|
||||
uint8_t phich_active;
|
||||
/// PHICH ACK
|
||||
|
||||
@@ -887,17 +887,11 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
||||
x2 = ((uint32_t)ulsch->rnti<<14) + ((uint32_t)subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
|
||||
ulsch_harq = ulsch->harq_processes[harq_pid];
|
||||
|
||||
if (harq_pid==255) {
|
||||
LOG_E(PHY, "FATAL ERROR: illegal harq_pid, returning\n");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,0);
|
||||
return -1;
|
||||
}
|
||||
AssertFatal(harq_pid!=255,
|
||||
"FATAL ERROR: illegal harq_pid, returning\n");
|
||||
|
||||
if (ulsch_harq->Nsymb_pusch == 0) {
|
||||
LOG_E(PHY, "FATAL ERROR: harq_pid %d, Nsymb 0!\n",harq_pid);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,0);
|
||||
return 1+ulsch->max_turbo_iterations;
|
||||
}
|
||||
AssertFatal(ulsch_harq->Nsymb_pusch != 0,
|
||||
"FATAL ERROR: harq_pid %d, Nsymb 0!\n",harq_pid);
|
||||
|
||||
|
||||
nb_rb = ulsch_harq->nb_rb;
|
||||
@@ -1032,10 +1026,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
||||
G = G - Q_RI - Q_CQI;
|
||||
ulsch_harq->G = G;
|
||||
|
||||
if ((int)G < 0) {
|
||||
LOG_E(PHY,"FATAL: ulsch_decoding.c G < 0 (%d) : Q_RI %d, Q_CQI %d\n",G,Q_RI,Q_CQI);
|
||||
return(-1);
|
||||
}
|
||||
AssertFatal((int)G > 0,
|
||||
"FATAL: ulsch_decoding.c G < 0 (%d) : Q_RI %d, Q_CQI %d\n",G,Q_RI,Q_CQI);
|
||||
|
||||
H = G + Q_CQI;
|
||||
Hprime = H/Q_m;
|
||||
|
||||
@@ -666,7 +666,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,
|
||||
{
|
||||
if (max_preamble_energy[0] > 350) {
|
||||
|
||||
LOG_I(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
|
||||
LOG_D(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
|
||||
eNB->Mod_id,
|
||||
eNB->CC_id,
|
||||
frame,
|
||||
@@ -1294,11 +1294,12 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
|
||||
if ((ulsch) &&
|
||||
(ulsch->rnti>0) &&
|
||||
(ulsch_harq->status == ACTIVE) &&
|
||||
(ulsch_harq->frame == frame) &&
|
||||
(ulsch_harq->subframe == subframe)) {
|
||||
(ulsch_harq->frame == frame) &&
|
||||
(ulsch_harq->subframe == subframe) &&
|
||||
(ulsch_harq->handled == 0)) {
|
||||
|
||||
|
||||
// UE is has ULSCH scheduling
|
||||
// UE has ULSCH scheduling
|
||||
|
||||
for (int rb=0;
|
||||
rb<=ulsch_harq->nb_rb;
|
||||
@@ -1469,9 +1470,23 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
|
||||
eNB->UE_stats[i].ulsch_errors[harq_pid],
|
||||
eNB->UE_stats[i].ulsch_decoding_attempts[harq_pid][0]);
|
||||
|
||||
ulsch_harq->handled = 1;
|
||||
} // if ((ulsch) &&
|
||||
// (ulsch->rnti>0) &&
|
||||
// (ulsch_harq->status == ACTIVE))
|
||||
|
||||
else if ((ulsch) &&
|
||||
(ulsch->rnti>0) &&
|
||||
(ulsch_harq->status == ACTIVE) &&
|
||||
(ulsch_harq->frame == frame) &&
|
||||
(ulsch_harq->subframe == subframe) &&
|
||||
(ulsch_harq->handled == 1)) {
|
||||
// this harq process is stale, kill it, this 1024 frames later (10s), consider reducing that
|
||||
ulsch_harq->status = SCH_IDLE;
|
||||
ulsch->harq_mask = 0;
|
||||
LOG_W(PHY,"Removing stale ULSCH config for UE %x\n",ulsch->rnti);
|
||||
}
|
||||
|
||||
} // for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user