debugging for SIB1-BR
This commit is contained in:
@@ -520,7 +520,7 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
|
|||||||
GpmodC = Gp%C;
|
GpmodC = Gp%C;
|
||||||
|
|
||||||
#ifdef RM_DEBUG
|
#ifdef RM_DEBUG
|
||||||
printf("lte_rate_matching_turbo: Ncb %d, Kw %d, Nir/C %d, rvidx %d, G %d, Qm %d, Nl%d, r %d\n",Ncb,3*(RTC<<5),Nir/C,rvidx, G, Qm,Nl,r);
|
LOG_D(PHY,"lte_rate_matching_turbo: Ncb %d, Kw %d, Nir/C %d, rvidx %d, G %d, Qm %d, Nl%d, r %d\n",Ncb,3*(RTC<<5),Nir/C,rvidx, G, Qm,Nl,r);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (r < (C-(GpmodC)))
|
if (r < (C-(GpmodC)))
|
||||||
|
|||||||
@@ -291,7 +291,9 @@ typedef struct {
|
|||||||
int16_t sqrt_rho_a;
|
int16_t sqrt_rho_a;
|
||||||
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
|
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
|
||||||
int16_t sqrt_rho_b;
|
int16_t sqrt_rho_b;
|
||||||
|
#ifdef Rel14
|
||||||
|
uint8_t sib1_br_flag;
|
||||||
|
#endif
|
||||||
} LTE_eNB_DLSCH_t;
|
} LTE_eNB_DLSCH_t;
|
||||||
|
|
||||||
#define PUSCH_x 2
|
#define PUSCH_x 2
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
|
|||||||
bzero(dlsch,sizeof(LTE_eNB_DLSCH_t));
|
bzero(dlsch,sizeof(LTE_eNB_DLSCH_t));
|
||||||
dlsch->Kmimo = Kmimo;
|
dlsch->Kmimo = Kmimo;
|
||||||
dlsch->Mdlharq = Mdlharq;
|
dlsch->Mdlharq = Mdlharq;
|
||||||
dlsch->Mlimit = 4;
|
dlsch->Mlimit = 8;
|
||||||
dlsch->Nsoft = Nsoft;
|
dlsch->Nsoft = Nsoft;
|
||||||
|
|
||||||
for (layer=0; layer<4; layer++) {
|
for (layer=0; layer<4; layer++) {
|
||||||
@@ -597,19 +597,19 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
|
|||||||
beamforming_mode = 8;
|
beamforming_mode = 8;
|
||||||
else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM9_10)
|
else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM9_10)
|
||||||
beamforming_mode = 9;
|
beamforming_mode = 9;
|
||||||
G = get_G(frame_parms,nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,frame,subframe,beamforming_mode);
|
G = get_G(frame_parms,
|
||||||
|
nb_rb,
|
||||||
|
dlsch->harq_processes[harq_pid]->rb_alloc,
|
||||||
|
mod_order,
|
||||||
|
dlsch->harq_processes[harq_pid]->Nl,
|
||||||
|
num_pdcch_symbols,
|
||||||
|
frame,
|
||||||
|
subframe,
|
||||||
|
beamforming_mode);
|
||||||
|
|
||||||
|
|
||||||
// if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet
|
|
||||||
if (dlsch->harq_processes[harq_pid]->round == 0) { // this is a new packet
|
if (dlsch->harq_processes[harq_pid]->round == 0) { // this is a new packet
|
||||||
|
|
||||||
/*
|
|
||||||
int i;
|
|
||||||
printf("dlsch (tx): \n");
|
|
||||||
for (i=0;i<(A>>3);i++)
|
|
||||||
printf("%02x.",a[i]);
|
|
||||||
printf("\n");
|
|
||||||
*/
|
|
||||||
// Add 24-bit crc (polynomial A) to payload
|
// Add 24-bit crc (polynomial A) to payload
|
||||||
crc = crc24a(a,
|
crc = crc24a(a,
|
||||||
A)>>8;
|
A)>>8;
|
||||||
|
|||||||
@@ -715,43 +715,48 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
|
LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
LOG_D(PHY,
|
if (frame < 20) {
|
||||||
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
|
LOG_I(PHY,
|
||||||
eNB->Mod_id, dlsch->rnti,harq_pid,
|
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", num_pdcch_symbols %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
|
||||||
frame, subframe, input_buffer_length,
|
eNB->Mod_id, dlsch->rnti,harq_pid,
|
||||||
get_G(fp,
|
frame, subframe, input_buffer_length, num_pdcch_symbols,
|
||||||
dlsch_harq->nb_rb,
|
get_G(fp,
|
||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->nb_rb,
|
||||||
get_Qm(dlsch_harq->mcs),
|
dlsch_harq->rb_alloc,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Qm,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->Nl,
|
||||||
frame,
|
num_pdcch_symbols,
|
||||||
subframe,
|
frame,
|
||||||
dlsch_harq->mimo_mode==TM7?7:0),
|
subframe,
|
||||||
dlsch_harq->nb_rb,
|
dlsch_harq->mimo_mode==TM7?7:0),
|
||||||
dlsch_harq->mcs,
|
dlsch_harq->nb_rb,
|
||||||
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
dlsch_harq->rb_alloc[0],
|
||||||
dlsch_harq->rvidx,
|
dlsch_harq->rb_alloc[1],
|
||||||
|
dlsch_harq->TBS,
|
||||||
|
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
||||||
|
dlsch_harq->rvidx,
|
||||||
dlsch_harq->round);
|
dlsch_harq->round);
|
||||||
|
for (i=0;i<dlsch_harq->TBS>>3;i++) printf("%x.",dlsch_harq->pdu[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
MSC_PHY_ENB,MSC_PHY_UE,
|
MSC_PHY_ENB,MSC_PHY_UE,
|
||||||
NULL,0,
|
NULL,0,
|
||||||
"%05u:%02u PDSCH/DLSCH input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")",
|
"%05u:%02u PDSCH/DLSCH input size = %"PRIu16", G %d, nb_rb %"PRIu16", TBS %"PRIu16", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")",
|
||||||
frame, subframe,
|
frame, subframe,
|
||||||
input_buffer_length,
|
input_buffer_length,
|
||||||
get_G(fp,
|
get_G(fp,
|
||||||
dlsch_harq->nb_rb,
|
dlsch_harq->nb_rb,
|
||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->rb_alloc,
|
||||||
get_Qm(dlsch_harq->mcs),
|
dlsch_harq->Qm,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Nl,
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
frame,
|
frame,
|
||||||
subframe,
|
subframe,
|
||||||
dlsch_harq->mimo_mode==TM7?7:0),
|
dlsch_harq->mimo_mode==TM7?7:0),
|
||||||
dlsch_harq->nb_rb,
|
dlsch_harq->nb_rb,
|
||||||
dlsch_harq->mcs,
|
dlsch_harq->TBS,
|
||||||
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
||||||
dlsch_harq->rvidx,
|
dlsch_harq->rvidx,
|
||||||
dlsch_harq->round);
|
dlsch_harq->round);
|
||||||
@@ -868,7 +873,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
get_G(fp,
|
get_G(fp,
|
||||||
dlsch_harq->nb_rb,
|
dlsch_harq->nb_rb,
|
||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->rb_alloc,
|
||||||
get_Qm(dlsch_harq->mcs),
|
dlsch_harq->Qm,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Nl,
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
frame,subframe,
|
frame,subframe,
|
||||||
@@ -1003,7 +1008,7 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
dlsch1 = eNB->dlsch[UE_id][1];
|
dlsch1 = eNB->dlsch[UE_id][1];
|
||||||
|
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
if ((rel13->pdsch_payload_type == 0) && (rel13->ue_type>0)) dlsch0->harq_ids[proc->subframe_tx] = 0;
|
if ((rel13->pdsch_payload_type < 2) && (rel13->ue_type>0)) dlsch0->harq_ids[proc->subframe_tx] = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
harq_pid = dlsch0->harq_ids[proc->subframe_tx];
|
harq_pid = dlsch0->harq_ids[proc->subframe_tx];
|
||||||
@@ -1018,7 +1023,15 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
else dlsch1_harq->pdu = sdu;
|
else dlsch1_harq->pdu = sdu;
|
||||||
|
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
|
dlsch0->sib1_br_flag=0;
|
||||||
if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR
|
if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR
|
||||||
|
dlsch0->rnti = 0xFFFF;
|
||||||
|
dlsch0->Kmimo = 1;
|
||||||
|
dlsch0->Mdlharq = 4;
|
||||||
|
dlsch0->Nsoft = 25344;
|
||||||
|
|
||||||
|
if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1;
|
||||||
|
|
||||||
// configure PDSCH
|
// configure PDSCH
|
||||||
switch (eNB->frame_parms.N_RB_DL) {
|
switch (eNB->frame_parms.N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
@@ -1055,7 +1068,8 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
dlsch0_harq->round = 0;
|
dlsch0_harq->round = 0;
|
||||||
dlsch0_harq->status = ACTIVE;
|
dlsch0_harq->status = ACTIVE;
|
||||||
dlsch0_harq->TBS = rel8->length<<3;
|
dlsch0_harq->TBS = rel8->length<<3;
|
||||||
|
dlsch0_harq->Qm = rel8->modulation;
|
||||||
|
dlsch0_harq->codeword = 0;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1437,34 +1451,42 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,0);
|
||||||
|
|
||||||
// Now scan UE specific DLSCH
|
// Now scan UE specific DLSCH
|
||||||
|
LTE_eNB_DLSCH_t *dlsch0,*dlsch1;
|
||||||
for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
|
for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
|
||||||
{
|
{
|
||||||
if ((eNB->dlsch[(uint8_t)UE_id][0])&&
|
dlsch0 = eNB->dlsch[(uint8_t)UE_id][0];
|
||||||
(eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&&
|
dlsch1 = eNB->dlsch[(uint8_t)UE_id][1];
|
||||||
(eNB->dlsch[(uint8_t)UE_id][0]->active == 1)) {
|
if ((dlsch0)&&
|
||||||
|
(dlsch0->rnti>0)&&
|
||||||
|
(dlsch0->active == 1)) {
|
||||||
|
|
||||||
// get harq_pid
|
// get harq_pid
|
||||||
harq_pid = eNB->dlsch[(uint8_t)UE_id][0]->harq_ids[subframe];
|
harq_pid = dlsch0->harq_ids[subframe];
|
||||||
AssertFatal(harq_pid>=0,"harq_pid is negative\n");
|
AssertFatal(harq_pid>=0,"harq_pid is negative\n");
|
||||||
// generate pdsch
|
// generate pdsch
|
||||||
pdsch_procedures(eNB,
|
pdsch_procedures(eNB,
|
||||||
proc,
|
proc,
|
||||||
harq_pid,
|
harq_pid,
|
||||||
eNB->dlsch[(uint8_t)UE_id][0],
|
dlsch0,
|
||||||
eNB->dlsch[(uint8_t)UE_id][1],
|
dlsch1,
|
||||||
&eNB->UE_stats[(uint32_t)UE_id],
|
&eNB->UE_stats[(uint32_t)UE_id],
|
||||||
0,
|
0,
|
||||||
num_pdcch_symbols);
|
#ifdef Rel14
|
||||||
|
dlsch0->sib1_br_flag==0 ? num_pdcch_symbols : 3
|
||||||
|
#else
|
||||||
|
num_pdcch_symbols
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((eNB->dlsch[(uint8_t)UE_id][0])&&
|
else if ((dlsch0)&&
|
||||||
(eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&&
|
(dlsch0->rnti>0)&&
|
||||||
(eNB->dlsch[(uint8_t)UE_id][0]->active == 0)) {
|
(dlsch0->active == 0)) {
|
||||||
|
|
||||||
// clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
|
// clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
|
||||||
eNB->dlsch[(uint8_t)UE_id][0]->subframe_tx[subframe]=0;
|
dlsch0->subframe_tx[subframe]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1676,7 +1698,6 @@ void process_HARQ_feedback(uint8_t UE_id,
|
|||||||
dl_subframe = ul_ACK_subframe2_dl_subframe(fp,
|
dl_subframe = ul_ACK_subframe2_dl_subframe(fp,
|
||||||
subframe,
|
subframe,
|
||||||
m);
|
m);
|
||||||
|
|
||||||
if (dlsch->subframe_tx[dl_subframe]==1) {
|
if (dlsch->subframe_tx[dl_subframe]==1) {
|
||||||
if (pusch_flag == 1)
|
if (pusch_flag == 1)
|
||||||
mp++;
|
mp++;
|
||||||
@@ -1696,10 +1717,9 @@ void process_HARQ_feedback(uint8_t UE_id,
|
|||||||
if (dl_harq_pid[m]<dlsch->Mdlharq) {
|
if (dl_harq_pid[m]<dlsch->Mdlharq) {
|
||||||
dlsch_harq_proc = dlsch->harq_processes[dl_harq_pid[m]];
|
dlsch_harq_proc = dlsch->harq_processes[dl_harq_pid[m]];
|
||||||
#ifdef DEBUG_PHY_PROC
|
#ifdef DEBUG_PHY_PROC
|
||||||
LOG_D(PHY,"[eNB %d][PDSCH %x/%d] subframe %d, status %d, round %d (mcs %d, rv %d, TBS %d)\n",eNB->Mod_id,
|
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->rnti,dl_harq_pid[m],dl_subframe,
|
||||||
dlsch_harq_proc->status,dlsch_harq_proc->round,
|
dlsch_harq_proc->status,dlsch_harq_proc->round,
|
||||||
dlsch->harq_processes[dl_harq_pid[m]]->mcs,
|
|
||||||
dlsch->harq_processes[dl_harq_pid[m]]->rvidx,
|
dlsch->harq_processes[dl_harq_pid[m]]->rvidx,
|
||||||
dlsch->harq_processes[dl_harq_pid[m]]->TBS);
|
dlsch->harq_processes[dl_harq_pid[m]]->TBS);
|
||||||
|
|
||||||
|
|||||||
@@ -121,16 +121,16 @@ schedule_SIB1_BR(
|
|||||||
break;
|
break;
|
||||||
case 1: // repetition 8
|
case 1: // repetition 8
|
||||||
k = frameP&3;
|
k = frameP&3;
|
||||||
AssertFatal(N_RB_DL<=15,"SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",N_RB_DL);
|
AssertFatal(N_RB_DL>15,"SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",N_RB_DL);
|
||||||
if ((foffset==0) && (subframeP!=(4+sfoffset))) continue;
|
if ((foffset==0) && (subframeP!=(4+sfoffset))) continue;
|
||||||
else if ((foffset==1) && (subframeP!=((9+sfoffset)%10))) continue;
|
else if ((foffset==1) && (subframeP!=((9+sfoffset)%10))) continue;
|
||||||
break;
|
break;
|
||||||
case 2: // repetition 16
|
case 2: // repetition 16
|
||||||
k = ((10*frameP) + subframeP)&3;
|
k = ((10*frameP) + subframeP)&3;
|
||||||
AssertFatal(N_RB_DL<=15,"SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",N_RB_DL);
|
AssertFatal(N_RB_DL>15,"SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",N_RB_DL);
|
||||||
if ((sfoffset == 1) && ((subframeP!=0)||(subframeP!=5))) continue;
|
if ((sfoffset == 1) && ((subframeP!=0)||(subframeP!=5))) continue;
|
||||||
else if ((sfoffset == 0) && (foffset==0) && ((subframeP!=4) || (subframeP!=9))) continue;
|
else if ((sfoffset == 0) && (foffset==0) && (subframeP!=4) && (subframeP!=9)) continue;
|
||||||
else if ((sfoffset == 0) && (foffset==1) && ((subframeP!=0) || (subframeP!=9))) continue;
|
else if ((sfoffset == 0) && (foffset==1) && (subframeP!=0) && (subframeP!=9)) continue;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// if we get here we have to schedule SIB1_BR in this frame/subframe
|
// if we get here we have to schedule SIB1_BR in this frame/subframe
|
||||||
@@ -170,14 +170,13 @@ schedule_SIB1_BR(
|
|||||||
Sj = Sj100;
|
Sj = Sj100;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Note: definition of k above and rvidx from 36.321 section 5.3.1
|
||||||
rvidx = (((3*k)>>1) + (k&1))&3;
|
rvidx = (((3*k)>>1) + (k&1))&3;
|
||||||
|
|
||||||
i = cc->SIB1_BR_cnt & (m-1);
|
i = cc->SIB1_BR_cnt & (m-1);
|
||||||
|
|
||||||
n_NB = Sj[((cc->physCellId % N_S_NB) + (i*N_S_NB/m))%N_S_NB];
|
n_NB = Sj[((cc->physCellId % N_S_NB) + (i*N_S_NB/m))%N_S_NB];
|
||||||
|
|
||||||
if ((frameP%1000) < 40) LOG_D(MAC,"[eNB %d] Frame %d, subframe %d : BCCH_BR->DLSCH (SIB1) CC_id %d\n",module_idP,frameP,subframeP,CC_id);
|
|
||||||
|
|
||||||
bcch_sdu_length = mac_rrc_data_req(module_idP,
|
bcch_sdu_length = mac_rrc_data_req(module_idP,
|
||||||
CC_id,
|
CC_id,
|
||||||
@@ -197,11 +196,11 @@ schedule_SIB1_BR(
|
|||||||
|
|
||||||
AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS);
|
AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS);
|
||||||
|
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d : BCCH_BR->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,CC_id,bcch_sdu_length);
|
if ((frameP&1023) < 200) LOG_I(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx);
|
||||||
|
|
||||||
// allocate all 6 PRBs in narrowband for SIB1_BR
|
// allocate all 6 PRBs in narrowband for SIB1_BR
|
||||||
first_rb = n_NB*6;
|
first_rb = n_NB*6;
|
||||||
vrb_map[first_rb] = 1;
|
vrb_map[first_rb] = 1;
|
||||||
vrb_map[first_rb+1] = 1;
|
vrb_map[first_rb+1] = 1;
|
||||||
vrb_map[first_rb+2] = 1;
|
vrb_map[first_rb+2] = 1;
|
||||||
vrb_map[first_rb+3] = 1;
|
vrb_map[first_rb+3] = 1;
|
||||||
@@ -342,6 +341,9 @@ schedule_SI_BR(
|
|||||||
(int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
|
(int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
|
||||||
SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
|
SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
|
||||||
|
|
||||||
|
// check that SI frequency-hopping is disabled
|
||||||
|
AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off,
|
||||||
|
"Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n");
|
||||||
long si_WindowLength_BR_r13 = si_WindowLength_BR_r13tab[cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13];
|
long si_WindowLength_BR_r13 = si_WindowLength_BR_r13tab[cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13];
|
||||||
|
|
||||||
long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13;
|
long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13;
|
||||||
@@ -359,13 +361,9 @@ schedule_SI_BR(
|
|||||||
// check if the SI is to be scheduled now
|
// check if the SI is to be scheduled now
|
||||||
int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
|
int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
|
||||||
int sf_mod_period = ((frameP*10)+subframeP)%period_in_sf;
|
int sf_mod_period = ((frameP*10)+subframeP)%period_in_sf;
|
||||||
|
int k = sf_mod_period&3;
|
||||||
|
// Note: definition of k and rvidx from 36.321 section 5.3.1
|
||||||
rvidx = (((3*sf_mod_period)>>1) + (sf_mod_period&1))&3;
|
rvidx = (((3*k)>>1) + (k&1))&3;
|
||||||
|
|
||||||
if ((frameP%1000) < 200) LOG_I(MAC,"[eNB %d] Frame %d : BCCH_BR->DLSCH (SI) CC_id %d, rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d\n",
|
|
||||||
module_idP,frameP,CC_id,si_Narrowband_r13,rvidx,
|
|
||||||
sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13);
|
|
||||||
|
|
||||||
if ((sf_mod_period < si_WindowLength_BR_r13) &&
|
if ((sf_mod_period < si_WindowLength_BR_r13) &&
|
||||||
((frameP&(((1<<si_RepetitionPattern_r13)-1)))==0)) { // this SIB is to be scheduled
|
((frameP&(((1<<si_RepetitionPattern_r13)-1)))==0)) { // this SIB is to be scheduled
|
||||||
@@ -385,19 +383,27 @@ schedule_SI_BR(
|
|||||||
AssertFatal(bcch_sdu_length <= (si_TBS_r13>>3),
|
AssertFatal(bcch_sdu_length <= (si_TBS_r13>>3),
|
||||||
"RRC provided bcch with length %d > %d (si_TBS_r13 %d)\n",
|
"RRC provided bcch with length %d > %d (si_TBS_r13 %d)\n",
|
||||||
bcch_sdu_length,(int)(si_TBS_r13>>3),(int)schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13);
|
bcch_sdu_length,(int)(si_TBS_r13>>3),(int)schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13);
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d : BCCH_BR %d->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,i,CC_id,bcch_sdu_length);
|
|
||||||
|
|
||||||
if ((frameP%1000) < 200) LOG_I(MAC,"[eNB %d] Frame %d : BCCH_BR->DLSCH (SI) CC_id %d, Received %d bytes for NB %d/rvidx %d\n",module_idP,frameP,CC_id,bcch_sdu_length,si_Narrowband_r13,rvidx);
|
|
||||||
|
|
||||||
// allocate all 6 PRBs in narrowband for SIB1_BR
|
// allocate all 6 PRBs in narrowband for SIB1_BR
|
||||||
first_rb = si_Narrowband_r13*6;
|
first_rb = (si_Narrowband_r13-1)*6;
|
||||||
|
|
||||||
|
// check that SIB1 didn't take this narrowband
|
||||||
|
if (vrb_map[first_rb] > 0) continue;
|
||||||
|
|
||||||
vrb_map[first_rb] = 1;
|
vrb_map[first_rb] = 1;
|
||||||
vrb_map[first_rb+1] = 1;
|
vrb_map[first_rb+1] = 1;
|
||||||
vrb_map[first_rb+2] = 1;
|
vrb_map[first_rb+2] = 1;
|
||||||
vrb_map[first_rb+3] = 1;
|
|
||||||
vrb_map[first_rb+4] = 1;
|
vrb_map[first_rb+4] = 1;
|
||||||
vrb_map[first_rb+5] = 1;
|
vrb_map[first_rb+5] = 1;
|
||||||
|
|
||||||
|
if ((frameP%1000) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
|
||||||
|
module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx,
|
||||||
|
sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13,
|
||||||
|
bcch_sdu_length);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
||||||
memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
|
memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
|
||||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||||
@@ -512,7 +518,7 @@ void schedule_mib(module_id_t module_idP,
|
|||||||
LOG_D(MAC,"Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n",
|
LOG_D(MAC,"Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n",
|
||||||
frameP,subframeP,dl_req->number_pdu,mib_sdu_length);
|
frameP,subframeP,dl_req->number_pdu,mib_sdu_length);
|
||||||
|
|
||||||
if ((frameP&1023) < 40) LOG_I(MAC,"[eNB %d] Frame %d : MIB->BCH CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",module_idP,frameP,CC_id,mib_sdu_length,cc->mib->message.schedulingInfoSIB1_BR_r13);
|
if ((frameP&1023) < 40) LOG_D(MAC,"[eNB %d] Frame %d : MIB->BCH CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",module_idP,frameP,CC_id,mib_sdu_length,cc->mib->message.schedulingInfoSIB1_BR_r13);
|
||||||
|
|
||||||
dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
||||||
memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
|
memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
|
||||||
@@ -749,7 +755,7 @@ schedule_SI(
|
|||||||
|
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
schedule_SIB1_BR(module_idP,frameP,subframeP);
|
schedule_SIB1_BR(module_idP,frameP,subframeP);
|
||||||
schedule_SI_BR(module_idP,frameP,subframeP);
|
// schedule_SI_BR(module_idP,frameP,subframeP);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(&eNB->schedule_si);
|
stop_meas(&eNB->schedule_si);
|
||||||
|
|||||||
@@ -511,7 +511,8 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
|
|||||||
|
|
||||||
////Rel1310
|
////Rel1310
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
if (configuration->schedulingInfoSIB1_BR_r13[CC_id] != 0)
|
if ((configuration->schedulingInfoSIB1_BR_r13[CC_id] != 0) &&
|
||||||
|
(brOption==TRUE))
|
||||||
{
|
{
|
||||||
sib1_1250->nonCriticalExtension = calloc(1, sizeof(SystemInformationBlockType1_v1310_IEs_t));
|
sib1_1250->nonCriticalExtension = calloc(1, sizeof(SystemInformationBlockType1_v1310_IEs_t));
|
||||||
memset(sib1_1250->nonCriticalExtension, 0, sizeof(SystemInformationBlockType1_v1310_IEs_t));
|
memset(sib1_1250->nonCriticalExtension, 0, sizeof(SystemInformationBlockType1_v1310_IEs_t));
|
||||||
|
|||||||
@@ -823,6 +823,11 @@ void tx_rf(RU_t *ru) {
|
|||||||
LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, fp->samples_per_tti);
|
LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, fp->samples_per_tti);
|
||||||
exit_fun( "problem transmitting samples" );
|
exit_fun( "problem transmitting samples" );
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
if ((proc->subframe_tx == 4) && (proc->frame_tx == 10)) {
|
||||||
|
write_output("ru_tx_sf4.m","txs",(void*)&ru->common.txdata[0][4*fp->samples_per_tti],fp->samples_per_tti,1,1);
|
||||||
|
exit(-1);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user