Merge remote-tracking branch 'origin/develop_integration_2018_w06' into develop
Summary of changes: - fix MAC indentation - bug fixes: - fix uplink over-scheduling - fix CQI updating (it was done even when it shouldn't) - fix rrc rel10 compilation - some minor bug fixes related to ASN.1
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1089,6 +1089,10 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
}
|
||||
//__m128i mmtmpX0,mmtmpX1,mmtmpX2,mmtmpX3;
|
||||
|
||||
#ifndef Rel14
|
||||
#define rx_prach0 rx_prach
|
||||
#endif
|
||||
|
||||
void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
RU_t *ru,
|
||||
uint16_t *max_preamble,
|
||||
@@ -1764,9 +1768,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
|
||||
|
||||
|
||||
#ifndef Rel14
|
||||
#define rx_prach rx_prach0
|
||||
#else
|
||||
#ifdef Rel14
|
||||
|
||||
void rx_prach(PHY_VARS_eNB *eNB,
|
||||
RU_t *ru,
|
||||
uint16_t *max_preamble,
|
||||
@@ -1806,7 +1809,8 @@ void rx_prach(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* Rel14 */
|
||||
|
||||
void init_prach_tables(int N_ZC)
|
||||
{
|
||||
|
||||
@@ -2151,11 +2151,10 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,RU_t *ru,
|
||||
uint16_t *max_preamble,
|
||||
uint16_t *max_preamble_energy,
|
||||
uint16_t *max_preamble_delay,
|
||||
#ifdef Rel14
|
||||
uint16_t Nf, uint8_t tdd_mapindex,
|
||||
uint8_t br_flag
|
||||
#else
|
||||
uint16_t Nf, uint8_t tdd_mapindex
|
||||
#ifdef Rel14
|
||||
,
|
||||
uint8_t br_flag
|
||||
#endif
|
||||
);
|
||||
/*!
|
||||
|
||||
@@ -744,8 +744,10 @@ typedef struct RU_t_s{
|
||||
int (*wakeup_rxtx)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru);
|
||||
/// function pointer to wakeup routine in lte-enb.
|
||||
void (*wakeup_prach_eNB)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
|
||||
#ifdef Rel14
|
||||
/// function pointer to wakeup routine in lte-enb.
|
||||
void (*wakeup_prach_eNB_br)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
|
||||
#endif
|
||||
/// function pointer to eNB entry routine
|
||||
void (*eNB_top)(struct PHY_VARS_eNB_s *eNB, int frame_rx, int subframe_rx, char *string);
|
||||
/// Timing statistics
|
||||
|
||||
@@ -144,8 +144,6 @@ typedef struct {
|
||||
uint8_t prach_hopping_offset[4];
|
||||
} PRACH_eMTC_CONFIG_INFO;
|
||||
|
||||
#endif
|
||||
|
||||
/// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec
|
||||
typedef struct {
|
||||
/// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). \vr{[0..837]}
|
||||
@@ -158,6 +156,8 @@ typedef struct {
|
||||
#endif
|
||||
} PRACH_eMTC_CONFIG_COMMON;
|
||||
|
||||
#endif
|
||||
|
||||
/// Enumeration for parameter \f$N_\text{ANRep}\f$ \ref PUCCH_CONFIG_DEDICATED::repetitionFactor.
|
||||
typedef enum {
|
||||
n2=0,
|
||||
|
||||
@@ -63,6 +63,7 @@ void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
#ifdef Rel14
|
||||
|
||||
void handle_nfapi_mpdcch_pdu(PHY_VARS_eNB *eNB,
|
||||
eNB_rxtx_proc_t *proc,
|
||||
nfapi_dl_config_request_pdu_t *dl_config_pdu)
|
||||
@@ -76,6 +77,7 @@ void handle_nfapi_mpdcch_pdu(PHY_VARS_eNB *eNB,
|
||||
// copy dci configuration into eNB structure
|
||||
fill_mdci_and_dlsch(eNB,proc,&mpdcch_vars->mdci_alloc[mpdcch_vars->num_dci],pdu);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void handle_nfapi_hi_dci0_dci_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,
|
||||
@@ -265,14 +267,21 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr
|
||||
dlsch0_harq->codeword = 0;
|
||||
dlsch0_harq->pdsch_start = rel10->pdsch_start;
|
||||
}
|
||||
#endif
|
||||
dlsch0->i0 = rel13->initial_transmission_sf_io;
|
||||
#endif
|
||||
|
||||
#ifdef Rel14
|
||||
LOG_D(PHY,"dlsch->i0:%04x dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]\n",
|
||||
dlsch0->i0,
|
||||
dlsch0_harq->pdsch_start, dlsch0_harq->nb_rb, dlsch0_harq->vrb_type, dlsch0_harq->rvidx, dlsch0_harq->Nl, dlsch0_harq->mimo_mode, dlsch0_harq->dl_power_off, dlsch0_harq->round, dlsch0_harq->status, dlsch0_harq->TBS, dlsch0_harq->Qm, dlsch0_harq->codeword, dlsch0_harq->rb_alloc[0],
|
||||
rel8->length
|
||||
);
|
||||
#else
|
||||
LOG_D(PHY,"dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]\n",
|
||||
dlsch0_harq->pdsch_start, dlsch0_harq->nb_rb, dlsch0_harq->vrb_type, dlsch0_harq->rvidx, dlsch0_harq->Nl, dlsch0_harq->mimo_mode, dlsch0_harq->dl_power_off, dlsch0_harq->round, dlsch0_harq->status, dlsch0_harq->TBS, dlsch0_harq->Qm, dlsch0_harq->codeword, dlsch0_harq->rb_alloc[0],
|
||||
rel8->length
|
||||
);
|
||||
#endif
|
||||
}
|
||||
|
||||
uint16_t to_beta_offset_harqack[16]={16,20,25,32,40,50,64,80,101,127,160,248,400,640,1008,8};
|
||||
@@ -764,8 +773,10 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
|
||||
break;
|
||||
#ifdef Rel14
|
||||
case NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE:
|
||||
#ifdef Rel14
|
||||
handle_nfapi_mpdcch_pdu(eNB,proc,dl_config_pdu);
|
||||
eNB->mpdcch_vars[subframe&1].num_dci++;
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -52,8 +52,9 @@
|
||||
|
||||
extern uint32_t nfapi_mode;
|
||||
|
||||
void prach_procedures(PHY_VARS_eNB *eNB,
|
||||
void prach_procedures(PHY_VARS_eNB *eNB
|
||||
#ifdef Rel14
|
||||
,
|
||||
int br_flag
|
||||
#endif
|
||||
) {
|
||||
|
||||
@@ -193,8 +193,12 @@ void config_mib(int Mod_idP,
|
||||
int NcpP,
|
||||
int p_eNBP,
|
||||
uint32_t dl_CarrierFreqP,
|
||||
uint32_t ul_CarrierFreqP,
|
||||
uint32_t pbch_repetitionP) {
|
||||
uint32_t ul_CarrierFreqP
|
||||
#ifdef Rel14
|
||||
,
|
||||
uint32_t pbch_repetitionP
|
||||
#endif
|
||||
) {
|
||||
|
||||
nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
|
||||
|
||||
@@ -215,7 +219,7 @@ void config_mib(int Mod_idP,
|
||||
cfg->rf_config.dl_channel_bandwidth.value = to_prb(dl_BandwidthP);
|
||||
cfg->rf_config.dl_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG;
|
||||
cfg->num_tlv++;
|
||||
LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP);
|
||||
LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP);
|
||||
|
||||
cfg->rf_config.ul_channel_bandwidth.value = to_prb(dl_BandwidthP);
|
||||
cfg->rf_config.ul_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG;
|
||||
@@ -267,36 +271,37 @@ LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP);
|
||||
cfg->emtc_config.pbch_repetitions_enable_r13.tl.tag = NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG;
|
||||
cfg->num_tlv++;
|
||||
#endif
|
||||
|
||||
LOG_I(MAC,
|
||||
"%s() NFAPI_CONFIG_REQUEST(num_tlv:%u) DL_BW:%u UL_BW:%u Ncp %d,p_eNB %d,earfcn %d,band %d,phich_resource %u phich_duration %u phich_power_offset %u PSS %d SSS %d PCI %d"
|
||||
"%s() NFAPI_CONFIG_REQUEST(num_tlv:%u) DL_BW:%u UL_BW:%u Ncp %d,p_eNB %d,earfcn %d,band %d,phich_resource %u phich_duration %u phich_power_offset %u PSS %d SSS %d PCI %d"
|
||||
#ifdef Rel14
|
||||
" PBCH repetition %d"
|
||||
|
||||
" PBCH repetition %d"
|
||||
#endif
|
||||
"\n"
|
||||
,__FUNCTION__
|
||||
,cfg->num_tlv
|
||||
,cfg->rf_config.dl_channel_bandwidth.value
|
||||
,cfg->rf_config.ul_channel_bandwidth.value
|
||||
,NcpP,p_eNBP
|
||||
,cfg->nfapi_config.earfcn.value
|
||||
,cfg->nfapi_config.rf_bands.rf_band[0]
|
||||
,cfg->phich_config.phich_resource.value
|
||||
,cfg->phich_config.phich_duration.value
|
||||
,cfg->phich_config.phich_power_offset.value
|
||||
,cfg->sch_config.primary_synchronization_signal_epre_eprers.value
|
||||
,cfg->sch_config.secondary_synchronization_signal_epre_eprers.value
|
||||
,cfg->sch_config.physical_cell_id.value
|
||||
"\n"
|
||||
,__FUNCTION__
|
||||
,cfg->num_tlv
|
||||
,cfg->rf_config.dl_channel_bandwidth.value
|
||||
,cfg->rf_config.ul_channel_bandwidth.value
|
||||
,NcpP,p_eNBP
|
||||
,cfg->nfapi_config.earfcn.value
|
||||
,cfg->nfapi_config.rf_bands.rf_band[0]
|
||||
,cfg->phich_config.phich_resource.value
|
||||
,cfg->phich_config.phich_duration.value
|
||||
,cfg->phich_config.phich_power_offset.value
|
||||
,cfg->sch_config.primary_synchronization_signal_epre_eprers.value
|
||||
,cfg->sch_config.secondary_synchronization_signal_epre_eprers.value
|
||||
,cfg->sch_config.physical_cell_id.value
|
||||
#ifdef Rel14
|
||||
,cfg->emtc_config.pbch_repetitions_enable_r13.value
|
||||
,cfg->emtc_config.pbch_repetitions_enable_r13.value
|
||||
#endif
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
void config_sib1(int Mod_idP, int CC_idP, TDD_Config_t * tdd_ConfigP)
|
||||
{
|
||||
|
||||
nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
|
||||
|
||||
nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
|
||||
|
||||
if (tdd_ConfigP) { //TDD
|
||||
cfg->subframe_config.duplex_mode.value = 0;
|
||||
@@ -396,16 +401,13 @@ config_sib2(int Mod_idP,
|
||||
cfg->pucch_config.n1_pucch_an.tl.tag = NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG;
|
||||
cfg->num_tlv++;
|
||||
|
||||
if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == true)
|
||||
{
|
||||
if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == true) {
|
||||
cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 1;
|
||||
}
|
||||
else if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled == true)
|
||||
{
|
||||
else if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled == true) {
|
||||
cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 2;
|
||||
}
|
||||
else // No hopping
|
||||
{
|
||||
else {
|
||||
cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 0;
|
||||
}
|
||||
cfg->uplink_reference_signal_config.uplink_rs_hopping.tl.tag = NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG;
|
||||
@@ -433,7 +435,7 @@ config_sib2(int Mod_idP,
|
||||
cfg->srs_config.srs_acknack_srs_simultaneous_transmission.value = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
|
||||
cfg->srs_config.srs_acknack_srs_simultaneous_transmission.tl.tag = NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG;
|
||||
cfg->num_tlv++;
|
||||
|
||||
|
||||
|
||||
nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
|
||||
|
||||
@@ -704,7 +706,6 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
#endif
|
||||
);
|
||||
|
||||
|
||||
mac_init_cell_params(Mod_idP,CC_idP);
|
||||
|
||||
if (schedulingInfoList!=NULL) {
|
||||
@@ -717,65 +718,66 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].sib1_v13ext = sib1_v13ext;
|
||||
}
|
||||
#endif
|
||||
if (radioResourceConfigCommon != NULL) {
|
||||
LOG_I(MAC, "[CONFIG]SIB2/3 Contents (partial)\n");
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.n_SB = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.n_SB);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.hoppingMode = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.enable64QAM = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
groupHoppingEnabled);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
groupAssignmentPUSCH);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
sequenceHoppingEnabled);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.cyclicShift = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
|
||||
if (radioResourceConfigCommon != NULL) {
|
||||
LOG_I(MAC, "[CONFIG]SIB2/3 Contents (partial)\n");
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.n_SB = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.n_SB);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.hoppingMode = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.enable64QAM = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
groupHoppingEnabled);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
groupAssignmentPUSCH);
|
||||
LOG_I(MAC,
|
||||
"[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.
|
||||
sequenceHoppingEnabled);
|
||||
LOG_I(MAC, "[CONFIG]pusch_config_common.cyclicShift = %ld\n",
|
||||
radioResourceConfigCommon->
|
||||
pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
|
||||
|
||||
AssertFatal(radioResourceConfigCommon->
|
||||
rach_ConfigCommon.maxHARQ_Msg3Tx > 0,
|
||||
"radioResourceconfigCommon %d == 0\n",
|
||||
(int) radioResourceConfigCommon->
|
||||
rach_ConfigCommon.maxHARQ_Msg3Tx);
|
||||
AssertFatal(radioResourceConfigCommon->
|
||||
rach_ConfigCommon.maxHARQ_Msg3Tx > 0,
|
||||
"radioResourceconfigCommon %d == 0\n",
|
||||
(int) radioResourceConfigCommon->
|
||||
rach_ConfigCommon.maxHARQ_Msg3Tx);
|
||||
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].
|
||||
radioResourceConfigCommon = radioResourceConfigCommon;
|
||||
if (ul_CarrierFreq > 0)
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_CarrierFreq =
|
||||
ul_CarrierFreq;
|
||||
if (ul_Bandwidth)
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth =
|
||||
*ul_Bandwidth;
|
||||
else
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth =
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].mib->message.
|
||||
dl_Bandwidth;
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].
|
||||
radioResourceConfigCommon = radioResourceConfigCommon;
|
||||
if (ul_CarrierFreq > 0)
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_CarrierFreq =
|
||||
ul_CarrierFreq;
|
||||
if (ul_Bandwidth)
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth =
|
||||
*ul_Bandwidth;
|
||||
else
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth =
|
||||
RC.mac[Mod_idP]->common_channels[CC_idP].mib->message.
|
||||
dl_Bandwidth;
|
||||
|
||||
config_sib2(Mod_idP, CC_idP, radioResourceConfigCommon,
|
||||
config_sib2(Mod_idP, CC_idP, radioResourceConfigCommon,
|
||||
#ifdef Rel14
|
||||
radioResourceConfigCommon_BR,
|
||||
radioResourceConfigCommon_BR,
|
||||
#endif
|
||||
NULL, ul_Bandwidth, additionalSpectrumEmission,
|
||||
mbsfn_SubframeConfigList);
|
||||
NULL, ul_Bandwidth, additionalSpectrumEmission,
|
||||
mbsfn_SubframeConfigList);
|
||||
|
||||
|
||||
}
|
||||
} // mib != NULL
|
||||
@@ -786,14 +788,14 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
|
||||
if (UE_id == -1) {
|
||||
LOG_E(MAC, "%s:%d:%s: ERROR, UE_id == -1\n", __FILE__,
|
||||
__LINE__, __FUNCTION__);
|
||||
__LINE__, __FUNCTION__);
|
||||
} else {
|
||||
if (logicalChannelConfig)
|
||||
UE_list->
|
||||
UE_template[CC_idP][UE_id].lcgidmap
|
||||
[logicalChannelIdentity] =
|
||||
*logicalChannelConfig->
|
||||
ul_SpecificParameters->logicalChannelGroup;
|
||||
ul_SpecificParameters->logicalChannelGroup;
|
||||
else
|
||||
UE_list->
|
||||
UE_template[CC_idP][UE_id].lcgidmap
|
||||
@@ -818,9 +820,9 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
UE_id = find_UE_id(Mod_idP, rntiP);
|
||||
if (UE_id == -1)
|
||||
LOG_E(MAC, "%s:%d:%s: ERROR, UE_id == -1\n", __FILE__,
|
||||
__LINE__, __FUNCTION__);
|
||||
__LINE__, __FUNCTION__);
|
||||
else
|
||||
config_dedicated_scell(Mod_idP, rntiP, sCellToAddMod_r10);
|
||||
config_dedicated_scell(Mod_idP, rntiP, sCellToAddMod_r10);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -852,7 +854,7 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
|
||||
if (mbsfn_AreaInfoList != NULL) {
|
||||
// One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time
|
||||
// One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time
|
||||
LOG_I(MAC,"[eNB %d][CONFIG] Received %d MBSFN Area Info\n", Mod_idP, mbsfn_AreaInfoList->list.count);
|
||||
RC.mac[Mod_idP]->common_channels[0].num_active_mbsfn_area = mbsfn_AreaInfoList->list.count;
|
||||
|
||||
@@ -893,10 +895,10 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
&pmch_InfoList->list.array[i]->mbms_SessionInfoList_r9;
|
||||
LOG_I(MAC, "PMCH[%d] Number of session (MTCH) is: %d\n", i,
|
||||
RC.mac[Mod_idP]->common_channels[0].
|
||||
mbms_SessionList[i]->list.count);
|
||||
mbms_SessionList[i]->list.count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
LOG_E(MAC, "%s() %s:%d RC.mac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req);
|
||||
@@ -918,11 +920,13 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP,
|
||||
phycfg.Mod_id = Mod_idP;
|
||||
phycfg.CC_id = CC_idP;
|
||||
phycfg.cfg = &RC.mac[Mod_idP]->config[CC_idP];
|
||||
|
||||
|
||||
if (RC.mac[Mod_idP]->if_inst->PHY_config_req) RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg);
|
||||
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
|
||||
}
|
||||
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -665,7 +665,7 @@ typedef struct {
|
||||
/// mcs from last UL scheduling
|
||||
uint8_t mcs_UL[8];
|
||||
/// TBS from last UL scheduling
|
||||
uint8_t TBS_UL[8];
|
||||
int TBS_UL[8];
|
||||
/// Flag to indicate UL has been scheduled at least once
|
||||
boolean_t ul_active;
|
||||
/// Flag to indicate UE has been configured (ACK from RRCConnectionSetup received)
|
||||
@@ -720,9 +720,6 @@ typedef struct {
|
||||
|
||||
// Logical channel info for link with RLC
|
||||
|
||||
/// Last received UE BSR info for each logical channel group id
|
||||
uint8_t bsr_info[MAX_NUM_LCGID];
|
||||
|
||||
/// LCGID mapping
|
||||
long lcgidmap[11];
|
||||
|
||||
@@ -749,8 +746,6 @@ typedef struct {
|
||||
/// size of remaining size to send for the downlink head SDU
|
||||
uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID];
|
||||
|
||||
/// total uplink buffer size
|
||||
uint32_t ul_total_buffer;
|
||||
/// uplink buffer creation time for each LCID
|
||||
uint32_t ul_buffer_creation_time[MAX_NUM_LCGID];
|
||||
/// maximum uplink buffer creation time across all the LCIDs
|
||||
@@ -758,6 +753,11 @@ typedef struct {
|
||||
/// uplink buffer size per LCID
|
||||
uint32_t ul_buffer_info[MAX_NUM_LCGID];
|
||||
|
||||
/// uplink bytes that are currently scheduled
|
||||
int scheduled_ul_bytes;
|
||||
/// estimation of the UL buffer size
|
||||
int estimated_ul_buffer;
|
||||
|
||||
/// UE tx power
|
||||
int32_t ue_tx_power;
|
||||
|
||||
|
||||
+494
-624
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -235,35 +235,28 @@ schedule_SIB1_BR(module_id_t module_idP,
|
||||
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_size =
|
||||
(uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
|
||||
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index =
|
||||
eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding =
|
||||
getRIV(N_RB_DL, first_rb, 6);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme =
|
||||
(cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index =
|
||||
0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode =
|
||||
(cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||
// Rel10 fields
|
||||
@@ -280,10 +273,7 @@ schedule_SIB1_BR(module_id_t module_idP,
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
|
||||
// Program TX Request
|
||||
TX_req =
|
||||
&eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->
|
||||
TX_req
|
||||
[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req->pdu_length = bcch_sdu_length;
|
||||
TX_req->pdu_index = eNB->pdu_index[CC_id]++;
|
||||
TX_req->num_segments = 1;
|
||||
@@ -315,11 +305,8 @@ schedule_SIB1_BR(module_id_t module_idP,
|
||||
}
|
||||
}
|
||||
|
||||
int si_WindowLength_BR_r13tab
|
||||
[SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare]
|
||||
= { 20, 40, 60, 80, 120, 160, 200 };
|
||||
int si_TBS_r13tab[SchedulingInfo_BR_r13__si_TBS_r13_b936 + 1] =
|
||||
{ 152, 208, 256, 328, 408, 504, 600, 712, 808, 936 };
|
||||
int si_WindowLength_BR_r13tab[SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare] = { 20, 40, 60, 80, 120, 160, 200 };
|
||||
int si_TBS_r13tab[SchedulingInfo_BR_r13__si_TBS_r13_b936 + 1] = { 152, 208, 256, 328, 408, 504, 600, 712, 808, 936 };
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void
|
||||
@@ -354,65 +341,40 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
||||
if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
|
||||
continue;
|
||||
else {
|
||||
|
||||
|
||||
AssertFatal(cc->
|
||||
sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13
|
||||
!= NULL,
|
||||
AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 != NULL,
|
||||
"sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
|
||||
|
||||
SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 =
|
||||
cc->sib1_v13ext->
|
||||
bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13;
|
||||
SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13;
|
||||
AssertFatal(schedulingInfoList_BR_r13 != NULL,
|
||||
"sib_v13ext->schedulingInfoList_BR_r13 is null\n");
|
||||
|
||||
SchedulingInfoList_t *schedulingInfoList =
|
||||
cc->schedulingInfoList;
|
||||
AssertFatal(schedulingInfoList_BR_r13->list.count ==
|
||||
schedulingInfoList->list.count,
|
||||
SchedulingInfoList_t *schedulingInfoList = cc->schedulingInfoList;
|
||||
AssertFatal(schedulingInfoList_BR_r13->list.count == schedulingInfoList->list.count,
|
||||
"schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n",
|
||||
schedulingInfoList_BR_r13->list.count,
|
||||
schedulingInfoList->list.count);
|
||||
|
||||
AssertFatal(cc->
|
||||
sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13
|
||||
<=
|
||||
SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
|
||||
AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
|
||||
"si_WindowLength_BR_r13 %d > %d\n",
|
||||
(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);
|
||||
|
||||
// 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,
|
||||
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;
|
||||
AssertFatal(si_RepetitionPattern_r13 <=
|
||||
SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF,
|
||||
long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13;
|
||||
AssertFatal(si_RepetitionPattern_r13<=SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF,
|
||||
"si_RepetitionPattern_r13 %d > %d\n",
|
||||
(int) si_RepetitionPattern_r13,
|
||||
SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF);
|
||||
// cycle through SIB list
|
||||
|
||||
for (i = 0; i < schedulingInfoList_BR_r13->list.count; i++) {
|
||||
long si_Periodicity =
|
||||
schedulingInfoList->list.array[i]->si_Periodicity;
|
||||
long si_Narrowband_r13 =
|
||||
schedulingInfoList_BR_r13->list.array[i]->
|
||||
si_Narrowband_r13;
|
||||
long si_TBS_r13 =
|
||||
si_TBS_r13tab[schedulingInfoList_BR_r13->
|
||||
list.array[i]->si_TBS_r13];
|
||||
long si_Periodicity = schedulingInfoList->list.array[i]->si_Periodicity;
|
||||
long si_Narrowband_r13 = schedulingInfoList_BR_r13->list.array[i]->si_Narrowband_r13;
|
||||
long si_TBS_r13 = si_TBS_r13tab[schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13];
|
||||
|
||||
// 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
|
||||
@@ -434,18 +396,14 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
||||
"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);
|
||||
(int) schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13);
|
||||
|
||||
// allocate all 6 PRBs in narrowband for SIB1_BR
|
||||
|
||||
// check that SIB1 didn't take this narrowband
|
||||
if (vrb_map[first_rb] > 0)
|
||||
continue;
|
||||
if (vrb_map[first_rb] > 0) continue;
|
||||
|
||||
first_rb =
|
||||
narrowband_to_first_rb(cc,
|
||||
si_Narrowband_r13 - 1);
|
||||
first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13 - 1);
|
||||
vrb_map[first_rb] = 1;
|
||||
vrb_map[first_rb + 1] = 1;
|
||||
vrb_map[first_rb + 2] = 1;
|
||||
@@ -465,89 +423,54 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
||||
|
||||
|
||||
|
||||
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));
|
||||
dl_config_pdu->pdu_type =
|
||||
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size =
|
||||
(uint8_t) (2 +
|
||||
sizeof(nfapi_dl_config_dlsch_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));
|
||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length =
|
||||
si_TBS_r13 >> 3;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index =
|
||||
eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti =
|
||||
0xFFFF;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = si_TBS_r13 >> 3;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.resource_block_coding =
|
||||
getRIV(N_RB_DL, first_rb, 6);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.redundancy_version = rvidx;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transport_block_to_codeword_swap_flag
|
||||
= 0;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transmission_scheme =
|
||||
(cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.number_of_layers = 1;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.number_of_subbands = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.ue_category_capacity = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.delta_power_offset_index = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transmission_mode =
|
||||
(cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.
|
||||
num_bf_vector = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||
// Rel10 fields (for PDSCH starting symbol)
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.
|
||||
pdsch_start =
|
||||
cc[CC_id].
|
||||
sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
|
||||
// Rel13 fields
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel13.initial_transmission_sf_io =
|
||||
absSF - sf_mod_period;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period;
|
||||
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||
dl_req->number_pdu++;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
|
||||
// Program TX Request
|
||||
TX_req =
|
||||
&eNB->TX_req[CC_id].
|
||||
tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].
|
||||
tx_request_body.number_of_pdus];
|
||||
TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req->pdu_length = bcch_sdu_length;
|
||||
TX_req->pdu_index = eNB->pdu_index[CC_id]++;
|
||||
TX_req->num_segments = 1;
|
||||
TX_req->segments[0].segment_length =
|
||||
bcch_sdu_length;
|
||||
TX_req->segments[0].segment_data =
|
||||
cc->BCCH_BR_pdu[i + 1].payload;
|
||||
eNB->TX_req[CC_id].tx_request_body.
|
||||
number_of_pdus++;
|
||||
TX_req->segments[0].segment_length = bcch_sdu_length;
|
||||
TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[i + 1].payload;
|
||||
eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||
eNB->TX_req[CC_id].sfn_sf = sfn_sf;
|
||||
eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||
@@ -615,24 +538,27 @@ schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
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);
|
||||
|
||||
if ((frameP & 1023) < 40)
|
||||
#ifdef Rel14
|
||||
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,
|
||||
(int) cc->mib->message.schedulingInfoSIB1_BR_r13);
|
||||
#else
|
||||
LOG_D(MAC,
|
||||
"[eNB %d] Frame %d : MIB->BCH CC_id %d, Received %d bytes\n",
|
||||
module_idP, frameP, CC_id, mib_sdu_length);
|
||||
#endif
|
||||
|
||||
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));
|
||||
dl_config_pdu->pdu_type =
|
||||
NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
|
||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
|
||||
2 + sizeof(nfapi_dl_config_bch_pdu);
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.length = mib_sdu_length;
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index =
|
||||
eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.length = mib_sdu_length;
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
dl_req->number_pdu++;
|
||||
|
||||
dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
|
||||
@@ -641,9 +567,7 @@ schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", dl_req->number_pdu, &dl_req->number_pdu);
|
||||
// DL request
|
||||
|
||||
TX_req =
|
||||
&eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req
|
||||
[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req->pdu_length = 3;
|
||||
TX_req->pdu_index = eNB->pdu_index[CC_id]++;
|
||||
TX_req->num_segments = 1;
|
||||
@@ -753,114 +677,81 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size =
|
||||
(uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format =
|
||||
NFAPI_DL_DCI_FORMAT_1A;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.
|
||||
aggregation_level = 4;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power
|
||||
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1A;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = 4;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power
|
||||
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.
|
||||
new_data_indicator_1 = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.
|
||||
redundancy_version_1 = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 0;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0;
|
||||
|
||||
dl_config_pdu->dci_dl_pdu.
|
||||
dci_dl_pdu_rel8.resource_block_coding =
|
||||
getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_request->sfn_sf = sfn_sf;
|
||||
|
||||
if (!CCE_allocation_infeasible
|
||||
(module_idP, CC_id, 0, subframeP,
|
||||
dl_config_pdu->dci_dl_pdu.
|
||||
dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
|
||||
if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
|
||||
LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
|
||||
dl_req->number_dci++;
|
||||
dl_req->number_pdu++;
|
||||
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));
|
||||
dl_config_pdu->pdu_type =
|
||||
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size =
|
||||
(uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index =
|
||||
eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = bcch_sdu_length;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
|
||||
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = bcch_sdu_length;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.resource_block_coding =
|
||||
getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.
|
||||
redundancy_version = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transport_block_to_codeword_swap_flag
|
||||
= 0;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.transmission_scheme =
|
||||
(cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.
|
||||
number_of_layers = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.
|
||||
number_of_subbands = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.ue_category_capacity = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.delta_power_offset_index = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.
|
||||
transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.
|
||||
dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector =
|
||||
1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||
dl_req->number_pdu++;
|
||||
|
||||
// Rel10 fields
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
|
||||
// Rel13 fields
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 0; // regular UE
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not BR
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 0; // regular UE
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not BR
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF
|
||||
|
||||
dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
|
||||
dl_config_request->sfn_sf = sfn_sf;
|
||||
dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
|
||||
dl_config_request->sfn_sf = sfn_sf;
|
||||
|
||||
// Program TX Request
|
||||
TX_req =
|
||||
&eNB->TX_req[CC_id].
|
||||
tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].
|
||||
tx_request_body.number_of_pdus];
|
||||
TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
|
||||
TX_req->pdu_length = bcch_sdu_length;
|
||||
TX_req->pdu_index = eNB->pdu_index[CC_id]++;
|
||||
TX_req->num_segments = 1;
|
||||
TX_req->segments[0].segment_length = bcch_sdu_length;
|
||||
TX_req->segments[0].segment_data =
|
||||
cc->BCCH_pdu.payload;
|
||||
TX_req->segments[0].segment_data = cc->BCCH_pdu.payload;
|
||||
eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||
eNB->TX_req[CC_id].sfn_sf = sfn_sf;
|
||||
eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||
|
||||
+1605
-1771
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1182
-1331
File diff suppressed because it is too large
Load Diff
@@ -1590,9 +1590,11 @@ assign_max_mcs_min_rb(module_id_t module_idP, int frameP,
|
||||
to_prb(RC.mac[module_idP]->common_channels[CC_id].
|
||||
ul_Bandwidth);
|
||||
// if this UE has UL traffic
|
||||
if (UE_template->ul_total_buffer > 0) {
|
||||
|
||||
int bytes_to_schedule = UE_template->estimated_ul_buffer - UE_template->scheduled_ul_bytes;
|
||||
if (bytes_to_schedule < 0) bytes_to_schedule = 0;
|
||||
int bits_to_schedule = bytes_to_schedule * 8;
|
||||
|
||||
if (bits_to_schedule > 0) {
|
||||
tbs = get_TBS_UL(mcs, 3) << 3; // 1 or 2 PRB with cqi enabled does not work well!
|
||||
rb_table_index = 2;
|
||||
|
||||
@@ -1602,7 +1604,7 @@ assign_max_mcs_min_rb(module_id_t module_idP, int frameP,
|
||||
Ncp, 0);
|
||||
|
||||
while ((((UE_template->phr_info - tx_power) < 0)
|
||||
|| (tbs > UE_template->ul_total_buffer))
|
||||
|| (tbs > bits_to_schedule))
|
||||
&& (mcs > 3)) {
|
||||
// LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs);
|
||||
mcs--;
|
||||
@@ -1610,7 +1612,7 @@ assign_max_mcs_min_rb(module_id_t module_idP, int frameP,
|
||||
tx_power = estimate_ue_tx_power(tbs, rb_table[rb_table_index], 0, Ncp, 0); // fixme: set use_srs
|
||||
}
|
||||
|
||||
while ((tbs < UE_template->ul_total_buffer) &&
|
||||
while ((tbs < bits_to_schedule) &&
|
||||
(rb_table[rb_table_index] <
|
||||
(N_RB_UL - first_rb[CC_id]))
|
||||
&& ((UE_template->phr_info - tx_power) > 0)
|
||||
@@ -1700,11 +1702,14 @@ static int ue_ul_compare(const void *_a, const void *_b, void *_params)
|
||||
UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0])
|
||||
return 1;
|
||||
|
||||
if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer >
|
||||
UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer)
|
||||
int bytes_to_schedule1 = UE_list->UE_template[pCCid1][UE_id1].estimated_ul_buffer - UE_list->UE_template[pCCid1][UE_id1].scheduled_ul_bytes;
|
||||
if (bytes_to_schedule1 < 0) bytes_to_schedule1 = 0;
|
||||
int bytes_to_schedule2 = UE_list->UE_template[pCCid2][UE_id2].estimated_ul_buffer - UE_list->UE_template[pCCid2][UE_id2].scheduled_ul_bytes;
|
||||
if (bytes_to_schedule2 < 0) bytes_to_schedule2 = 0;
|
||||
|
||||
if (bytes_to_schedule1 > bytes_to_schedule2)
|
||||
return -1;
|
||||
if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer <
|
||||
UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer)
|
||||
if (bytes_to_schedule1 < bytes_to_schedule2)
|
||||
return 1;
|
||||
|
||||
if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul >
|
||||
|
||||
@@ -217,11 +217,11 @@ int dump_eNB_l2_stats(char *buffer, int length)
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].num_errors_rx);
|
||||
|
||||
len+= sprintf(&buffer[len],"[MAC] Received PHR PH = %d (db)\n", UE_list->UE_template[CC_id][UE_id].phr_info);
|
||||
len+= sprintf(&buffer[len],"[MAC] Received BSR LCGID[0][1][2][3] = %u %u %u %u\n",
|
||||
UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID0],
|
||||
UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID1],
|
||||
UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID2],
|
||||
UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID3]
|
||||
len+= sprintf(&buffer[len],"[MAC] Estimated size LCGID[0][1][2][3] = %u %u %u %u\n",
|
||||
UE_list->UE_template[CC_id][UE_id].ul_buffer_info[LCGID0],
|
||||
UE_list->UE_template[CC_id][UE_id].ul_buffer_info[LCGID1],
|
||||
UE_list->UE_template[CC_id][UE_id].ul_buffer_info[LCGID2],
|
||||
UE_list->UE_template[CC_id][UE_id].ul_buffer_info[LCGID3]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -876,7 +876,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
||||
(*sib3)->intraFreqCellReselectionInfo.presenceAntennaPort1 = 0;
|
||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.buf = CALLOC(8,1);
|
||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.size = 1;
|
||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.buf[0] = 1;
|
||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.buf[0] = 1 << 6;
|
||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.bits_unused = 6;
|
||||
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA = 1;
|
||||
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF = (struct SpeedStateScaleFactors *)NULL;
|
||||
|
||||
@@ -416,7 +416,9 @@ init_MCCH(
|
||||
0,//rnti
|
||||
(BCCH_BCH_Message_t *)NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
(struct PhysicalConfigDedicated *)NULL,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -1169,7 +1171,9 @@ rrc_eNB_generate_RRCConnectionReestablishment(
|
||||
ctxt_pP->rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
(struct PhysicalConfigDedicated* ) ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -3976,7 +3980,9 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t*) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t*) NULL,
|
||||
#endif
|
||||
ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -4555,7 +4561,9 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -4825,7 +4833,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -4878,7 +4888,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
@@ -4994,7 +5006,9 @@ rrc_eNB_generate_RRCConnectionSetup(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(BCCH_BCH_Message_t *) NULL,
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#ifdef Rel14
|
||||
(RadioResourceConfigCommonSIB_t *) NULL,
|
||||
#endif
|
||||
ue_context_pP->ue_context.physicalConfigDedicated,
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
|
||||
@@ -470,7 +470,7 @@ int s1ap_eNB_encode_initial_ue_message(
|
||||
return s1ap_generate_initiating_message(buffer,
|
||||
length,
|
||||
S1ap_ProcedureCode_id_initialUEMessage,
|
||||
S1ap_Criticality_reject,
|
||||
S1ap_Criticality_ignore,
|
||||
&asn_DEF_S1ap_InitialUEMessage,
|
||||
initialUEMessage_p);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -10,7 +10,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -13,7 +13,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -13,7 +13,7 @@ eNBs =
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
@@ -1050,7 +1050,9 @@ void init_eNB_afterRU(void) {
|
||||
|
||||
RC.ru[ru_id]->wakeup_rxtx = wakeup_rxtx;
|
||||
RC.ru[ru_id]->wakeup_prach_eNB = wakeup_prach_eNB;
|
||||
#ifdef Rel14
|
||||
RC.ru[ru_id]->wakeup_prach_eNB_br = wakeup_prach_eNB_br;
|
||||
#endif
|
||||
RC.ru[ru_id]->eNB_top = eNB_top;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user