Merge remote-tracking branch 'origin/develop-NR_SA_F1AP_5GRECORDS-abs' into bandwidth-testing
This commit is contained in:
@@ -56,21 +56,21 @@ pipeline {
|
|||||||
booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
||||||
]
|
]
|
||||||
//calling NSA long sub job
|
//calling NSA long sub job
|
||||||
build job: "RAN-NSA-Mini-Module-Long", wait : true, propagate : false, parameters: [
|
// build job: "RAN-NSA-Mini-Module-Long", wait : true, propagate : false, parameters: [
|
||||||
string(name: 'eNB_MR', value: String.valueOf(MR)),
|
// string(name: 'eNB_MR', value: String.valueOf(MR)),
|
||||||
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
// string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
||||||
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
// string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
||||||
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
// string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
||||||
booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
// booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
||||||
]
|
// ]
|
||||||
//calling NSA attach/detach job
|
//calling NSA attach/detach job
|
||||||
build job: "RAN-NSA-Mini-Module-Attach-Detach", wait : true, propagate : false, parameters: [
|
// build job: "RAN-NSA-Mini-Module-Attach-Detach", wait : true, propagate : false, parameters: [
|
||||||
string(name: 'eNB_MR', value: String.valueOf(MR)),
|
// string(name: 'eNB_MR', value: String.valueOf(MR)),
|
||||||
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
// string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
||||||
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
// string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
||||||
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
// string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
||||||
booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
// booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
|
||||||
]
|
// ]
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -872,24 +872,36 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
|
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
|
||||||
if (N_ZC == 839) {
|
if (N_ZC == 839) {
|
||||||
log2_ifft_size = 10;
|
|
||||||
idft(IDFT_1024,prachF,prach_ifft_tmp,1);
|
idft(IDFT_1024,prachF,prach_ifft_tmp,1);
|
||||||
// compute energy and accumulate over receive antennas
|
// compute energy and accumulate over receive antennas
|
||||||
for (i=0;i<2048;i++)
|
for (i=0;i<1024;i++)
|
||||||
prach_ifft[i] += ((int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[i<<1] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)])/nb_rx;
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[i<<1] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
||||||
} else {
|
} else {
|
||||||
idft(IDFT_256,prachF,prach_ifft_tmp,1);
|
idft(IDFT_256,prachF,prach_ifft_tmp,1);
|
||||||
log2_ifft_size = 8;
|
log2_ifft_size = 8;
|
||||||
// compute energy and accumulate over receive antennas and repetitions for BR
|
// compute energy and accumulate over receive antennas and repetitions for BR
|
||||||
for (i=0;i<256;i++)
|
for (i=0;i<256;i++)
|
||||||
prach_ifft[i] += ((int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)])/nb_rx;
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
|
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
||||||
|
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
if (LOG_DUMPFLAG(PRACH)) {
|
|
||||||
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
|
||||||
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
|
||||||
}
|
|
||||||
}// antennas_rx
|
}// antennas_rx
|
||||||
|
|
||||||
|
// Normalization of energy over ifft and receive antennas
|
||||||
|
if (N_ZC == 839) {
|
||||||
|
log2_ifft_size = 10;
|
||||||
|
for (i=0;i<1024;i++)
|
||||||
|
prach_ifft[i] = (prach_ifft[i]>>log2_ifft_size)/nb_rx;
|
||||||
|
} else {
|
||||||
|
log2_ifft_size = 8;
|
||||||
|
for (i=0;i<256;i++)
|
||||||
|
prach_ifft[i] = (prach_ifft[i]>>log2_ifft_size)/nb_rx;
|
||||||
|
}
|
||||||
|
|
||||||
} // new dft
|
} // new dft
|
||||||
|
|
||||||
// check energy in nth time shift, for
|
// check energy in nth time shift, for
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
{CONFIG_STRING_L1_REMOTE_N_PORTD, NULL, 0, uptr:NULL, defintval:50031, TYPE_UINT, 0}, \
|
{CONFIG_STRING_L1_REMOTE_N_PORTD, NULL, 0, uptr:NULL, defintval:50031, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_L1_PUSCH_PROC_THREADS, NULL, 0, uptr:NULL, defintval:1, TYPE_UINT, 0}, \
|
{CONFIG_STRING_L1_PUSCH_PROC_THREADS, NULL, 0, uptr:NULL, defintval:1, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:100, TYPE_UINT, 0}, \
|
{CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:100, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_L1_PRACH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:250, TYPE_UINT, 0}, \
|
{CONFIG_STRING_L1_PRACH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:150, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_L1_PUSCH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:50, TYPE_UINT, 0} \
|
{CONFIG_STRING_L1_PUSCH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:50, TYPE_UINT, 0} \
|
||||||
}
|
}
|
||||||
#define L1_CC_IDX 0
|
#define L1_CC_IDX 0
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
|
|||||||
if ((symb_pucch & symb_tda_mi) == 0 && (symb_ulMixed & symb_tda_mi) == symb_tda_mi) {
|
if ((symb_pucch & symb_tda_mi) == 0 && (symb_ulMixed & symb_tda_mi) == symb_tda_mi) {
|
||||||
tdaMi = 1;
|
tdaMi = 1;
|
||||||
} else {
|
} else {
|
||||||
LOG_E(MAC,
|
LOG_E(NR_MAC,
|
||||||
"TDA index 1 UL overlaps with PUCCH or is not entirely in mixed slot (symb_pucch %x symb_ulMixed %x symb_tda_mi %x), won't schedule UL mixed slot\n",
|
"TDA index 1 UL overlaps with PUCCH or is not entirely in mixed slot (symb_pucch %x symb_ulMixed %x symb_tda_mi %x), won't schedule UL mixed slot\n",
|
||||||
symb_pucch,
|
symb_pucch,
|
||||||
symb_ulMixed,
|
symb_ulMixed,
|
||||||
@@ -168,7 +168,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (k2 < tdd->nrofUplinkSlots)
|
if (k2 < tdd->nrofUplinkSlots)
|
||||||
LOG_W(MAC,
|
LOG_W(NR_MAC,
|
||||||
"k2 %d < tdd->nrofUplinkSlots %ld: not all UL slots can be scheduled\n",
|
"k2 %d < tdd->nrofUplinkSlots %ld: not all UL slots can be scheduled\n",
|
||||||
k2,
|
k2,
|
||||||
tdd->nrofUplinkSlots);
|
tdd->nrofUplinkSlots);
|
||||||
@@ -331,7 +331,7 @@ void nr_process_mac_pdu(module_id_t module_idP,
|
|||||||
sched_ctrl->ph = PH - 32 + (PH - 54);
|
sched_ctrl->ph = PH - 32 + (PH - 54);
|
||||||
/* 38.133 Table10.1.18.1-1 */
|
/* 38.133 Table10.1.18.1-1 */
|
||||||
sched_ctrl->pcmax = PCMAX - 29;
|
sched_ctrl->pcmax = PCMAX - 29;
|
||||||
LOG_D(MAC, "SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)\n",
|
LOG_D(NR_MAC, "SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)\n",
|
||||||
phr->R1, PH, sched_ctrl->ph, phr->R2, PCMAX, sched_ctrl->pcmax);
|
phr->R1, PH, sched_ctrl->ph, phr->R2, PCMAX, sched_ctrl->pcmax);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -817,7 +817,7 @@ bool nr_UE_is_to_be_scheduled(module_id_t mod_id, int CC_id, int UE_id, frame_t
|
|||||||
* (3) or we did not schedule it in more than 10 frames */
|
* (3) or we did not schedule it in more than 10 frames */
|
||||||
const bool has_data = sched_ctrl->estimated_ul_buffer > sched_ctrl->sched_ul_bytes;
|
const bool has_data = sched_ctrl->estimated_ul_buffer > sched_ctrl->sched_ul_bytes;
|
||||||
const bool high_inactivity = diff >= nrmac->ulsch_max_slots_inactivity;
|
const bool high_inactivity = diff >= nrmac->ulsch_max_slots_inactivity;
|
||||||
LOG_D(MAC,
|
LOG_D(NR_MAC,
|
||||||
"%4d.%2d UL inactivity %d slots has_data %d SR %d\n",
|
"%4d.%2d UL inactivity %d slots has_data %d SR %d\n",
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
@@ -854,12 +854,13 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
|
|
||||||
const uint8_t num_dmrs_cdm_grps_no_data = sched_ctrl->active_bwp ? 1 : 2;
|
const uint8_t num_dmrs_cdm_grps_no_data = sched_ctrl->active_bwp ? 1 : 2;
|
||||||
const int tda = sched_ctrl->active_ubwp ? RC.nrmac[module_id]->preferred_ul_tda[sched_ctrl->active_ubwp->bwp_Id][slot] : 0;
|
const int tda = sched_ctrl->active_ubwp ? RC.nrmac[module_id]->preferred_ul_tda[sched_ctrl->active_ubwp->bwp_Id][slot] : 0;
|
||||||
|
LOG_D(NR_MAC,"retInfo->time_domain_allocation = %d, tda = %d\n", retInfo->time_domain_allocation, tda);
|
||||||
if (tda == retInfo->time_domain_allocation) {
|
if (tda == retInfo->time_domain_allocation) {
|
||||||
/* Check the resource is enough for retransmission */
|
/* Check the resource is enough for retransmission */
|
||||||
while (rbStart < bwpSize && !rballoc_mask[rbStart])
|
while (rbStart < bwpSize && !rballoc_mask[rbStart])
|
||||||
rbStart++;
|
rbStart++;
|
||||||
if (rbStart + retInfo->rbSize >= bwpSize) {
|
if (rbStart + retInfo->rbSize > bwpSize) {
|
||||||
LOG_D(MAC, "cannot allocate retransmission of UE %d/RNTI %04x: no resources\n", UE_id, UE_info->rnti[UE_id]);
|
LOG_W(NR_MAC, "cannot allocate retransmission of UE %d/RNTI %04x: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d\n", UE_id, UE_info->rnti[UE_id], rbStart, retInfo->rbSize, bwpSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* check whether we need to switch the TDA allocation since tha last
|
/* check whether we need to switch the TDA allocation since tha last
|
||||||
@@ -871,7 +872,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
|| ps->dci_format != dci_format
|
|| ps->dci_format != dci_format
|
||||||
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data)
|
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data)
|
||||||
nr_set_pusch_semi_static(scc, sched_ctrl->active_ubwp, dci_format, tda, num_dmrs_cdm_grps_no_data, ps);
|
nr_set_pusch_semi_static(scc, sched_ctrl->active_ubwp, dci_format, tda, num_dmrs_cdm_grps_no_data, ps);
|
||||||
LOG_D(MAC, "%s(): retransmission keeping TDA %d and TBS %d\n", __func__, tda, retInfo->tb_size);
|
LOG_D(NR_MAC, "%s(): retransmission keeping TDA %d and TBS %d\n", __func__, tda, retInfo->tb_size);
|
||||||
} else {
|
} else {
|
||||||
/* the retransmission will use a different time domain allocation, check
|
/* the retransmission will use a different time domain allocation, check
|
||||||
* that we have enough resources */
|
* that we have enough resources */
|
||||||
@@ -895,10 +896,10 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
&new_tbs,
|
&new_tbs,
|
||||||
&new_rbSize);
|
&new_rbSize);
|
||||||
if (!success || new_tbs != retInfo->tb_size) {
|
if (!success || new_tbs != retInfo->tb_size) {
|
||||||
LOG_D(MAC, "%s(): new TBsize %d of new TDA does not match old TBS %d\n", __func__, new_tbs, retInfo->tb_size);
|
LOG_D(NR_MAC, "%s(): new TBsize %d of new TDA does not match old TBS %d\n", __func__, new_tbs, retInfo->tb_size);
|
||||||
return false; /* the maximum TBsize we might have is smaller than what we need */
|
return false; /* the maximum TBsize we might have is smaller than what we need */
|
||||||
}
|
}
|
||||||
LOG_D(MAC, "%s(): retransmission with TDA %d->%d and TBS %d -> %d\n", __func__, retInfo->time_domain_allocation, tda, retInfo->tb_size, new_tbs);
|
LOG_D(NR_MAC, "%s(): retransmission with TDA %d->%d and TBS %d -> %d\n", __func__, retInfo->time_domain_allocation, tda, retInfo->tb_size, new_tbs);
|
||||||
/* we can allocate it. Overwrite the time_domain_allocation, the number
|
/* we can allocate it. Overwrite the time_domain_allocation, the number
|
||||||
* of RBs, and the new TB size. The rest is done below */
|
* of RBs, and the new TB size. The rest is done below */
|
||||||
retInfo->tb_size = new_tbs;
|
retInfo->tb_size = new_tbs;
|
||||||
@@ -910,7 +911,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
/* Find free CCE */
|
/* Find free CCE */
|
||||||
bool freeCCE = find_free_CCE(module_id, slot, UE_id);
|
bool freeCCE = find_free_CCE(module_id, slot, UE_id);
|
||||||
if (!freeCCE) {
|
if (!freeCCE) {
|
||||||
LOG_D(MAC, "%4d.%2d no free CCE for retransmission UL DCI UE %04x\n", frame, slot, UE_info->rnti[UE_id]);
|
LOG_D(NR_MAC, "%4d.%2d no free CCE for retransmission UL DCI UE %04x\n", frame, slot, UE_info->rnti[UE_id]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -923,7 +924,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
sched_ctrl->sched_pusch = *retInfo;
|
sched_ctrl->sched_pusch = *retInfo;
|
||||||
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
|
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(NR_MAC,
|
||||||
"%4d.%2d Allocate UL retransmission UE %d/RNTI %04x sched %4d.%2d (%d RBs)\n",
|
"%4d.%2d Allocate UL retransmission UE %d/RNTI %04x sched %4d.%2d (%d RBs)\n",
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
@@ -999,7 +1000,7 @@ void pf_ul(module_id_t module_id,
|
|||||||
bool r = allocate_ul_retransmission(
|
bool r = allocate_ul_retransmission(
|
||||||
module_id, frame, slot, rballoc_mask, &n_rb_sched, UE_id, sched_pusch->ul_harq_pid);
|
module_id, frame, slot, rballoc_mask, &n_rb_sched, UE_id, sched_pusch->ul_harq_pid);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
LOG_D(MAC, "%4d.%2d UL retransmission UE RNTI %04x can NOT be allocated\n", frame, slot, UE_info->rnti[UE_id]);
|
LOG_D(NR_MAC, "%4d.%2d UL retransmission UE RNTI %04x can NOT be allocated\n", frame, slot, UE_info->rnti[UE_id]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
|
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
|
||||||
@@ -1030,7 +1031,7 @@ void pf_ul(module_id_t module_id,
|
|||||||
if (max_num_ue < 0)
|
if (max_num_ue < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LOG_D(NR_MAC,"Looking for min_rb %d RBs, starting at %d\n", min_rb,rbStart);
|
LOG_D(NR_MAC,"Looking for min_rb %d RBs, starting at %d\n", min_rb, rbStart);
|
||||||
while (rbStart < bwpSize && !rballoc_mask[rbStart]) rbStart++;
|
while (rbStart < bwpSize && !rballoc_mask[rbStart]) rbStart++;
|
||||||
if (rbStart + min_rb >= bwpSize) {
|
if (rbStart + min_rb >= bwpSize) {
|
||||||
LOG_W(NR_MAC, "cannot allocate continuous UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d\n",
|
LOG_W(NR_MAC, "cannot allocate continuous UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d\n",
|
||||||
@@ -1162,7 +1163,7 @@ void pf_ul(module_id_t module_id,
|
|||||||
&rbSize);
|
&rbSize);
|
||||||
sched_pusch->rbSize = rbSize;
|
sched_pusch->rbSize = rbSize;
|
||||||
sched_pusch->tb_size = TBS;
|
sched_pusch->tb_size = TBS;
|
||||||
LOG_D(MAC,"rbSize %d, TBS %d, est buf %d, sched_ul %d, B %d\n",
|
LOG_D(NR_MAC,"rbSize %d, TBS %d, est buf %d, sched_ul %d, B %d\n",
|
||||||
rbSize, sched_pusch->tb_size, sched_ctrl->estimated_ul_buffer, sched_ctrl->sched_ul_bytes, B);
|
rbSize, sched_pusch->tb_size, sched_ctrl->estimated_ul_buffer, sched_ctrl->sched_ul_bytes, B);
|
||||||
|
|
||||||
/* Mark the corresponding RBs as used */
|
/* Mark the corresponding RBs as used */
|
||||||
|
|||||||
Reference in New Issue
Block a user