rework nr_rrc_mac_config_req
This commit is contained in:
@@ -888,7 +888,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
//Configure UE
|
//Configure UE
|
||||||
NR_BCCH_BCH_Message_t *mib = get_new_MIB_NR(scc);
|
NR_BCCH_BCH_Message_t *mib = get_new_MIB_NR(scc);
|
||||||
nr_rrc_mac_config_req_ue(0, 0, 0, mib->message.choice.mib, NULL, NULL, secondaryCellGroup);
|
nr_rrc_mac_config_req_mib(0, 0, 0, mib, false);
|
||||||
|
nr_rrc_mac_config_req_scg(0, 0, 0, secondaryCellGroup);
|
||||||
|
|
||||||
nr_dcireq_t dcireq;
|
nr_dcireq_t dcireq;
|
||||||
nr_scheduled_response_t scheduled_response;
|
nr_scheduled_response_t scheduled_response;
|
||||||
|
|||||||
@@ -744,11 +744,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
UE_mac->if_module = nr_ue_if_module_init(0);
|
UE_mac->if_module = nr_ue_if_module_init(0);
|
||||||
|
|
||||||
// nr_rrc_mac_config_req_ue(0,0,0,rrc.carrier.mib.message.choice.mib, NULL, NULL, secondaryCellGroup);
|
|
||||||
|
|
||||||
nr_ue_phy_config_request(&UE_mac->phy_config);
|
nr_ue_phy_config_request(&UE_mac->phy_config);
|
||||||
|
|
||||||
|
|
||||||
unsigned char harq_pid = 0;
|
unsigned char harq_pid = 0;
|
||||||
|
|
||||||
NR_gNB_ULSCH_t *ulsch_gNB = &gNB->ulsch[UE_id];
|
NR_gNB_ULSCH_t *ulsch_gNB = &gNB->ulsch[UE_id];
|
||||||
|
|||||||
@@ -693,145 +693,157 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_rrc_mac_config_req_mib(module_id_t module_id,
|
||||||
|
uint8_t gNB_index,
|
||||||
|
int cc_idP,
|
||||||
|
NR_MIB_t *mib,
|
||||||
|
bool sched_sib1)
|
||||||
|
{
|
||||||
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
|
AssertFatal(mib, "MIB should not be NULL\n");
|
||||||
|
if (mac->dl_config_request == NULL) // for SIB1 reception
|
||||||
|
mac->dl_config_request = calloc(NR_MAX_SLOTS_PER_FRAME, sizeof(*mac->dl_config_request));
|
||||||
|
mac->mib = mib; // update by every reception
|
||||||
|
mac->phy_config.Mod_id = module_id;
|
||||||
|
mac->phy_config.CC_id = cc_idP;
|
||||||
|
mac->get_sib1 = sched_sib1;
|
||||||
|
}
|
||||||
|
|
||||||
int nr_rrc_mac_config_req_ue(module_id_t module_id,
|
void nr_rrc_mac_config_req_sib1(module_id_t module_id,
|
||||||
int cc_idP,
|
int cc_idP,
|
||||||
uint8_t gNB_index,
|
uint8_t gNB_index,
|
||||||
NR_MIB_t *mibP,
|
NR_ServingCellConfigCommonSIB_t *scc)
|
||||||
NR_ServingCellConfigCommonSIB_t *sccP,
|
{
|
||||||
NR_CellGroupConfig_t *cell_group_config,
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
NR_CellGroupConfig_t *scell_group_config)
|
AssertFatal(scc, "SIB1 SCC should not be NULL\n");
|
||||||
|
mac->scc_SIB = scc;
|
||||||
|
mac->nr_band = *scc->downlinkConfigCommon.frequencyInfoDL.frequencyBandList.list.array[0]->freqBandIndicatorNR;
|
||||||
|
config_common_ue_sa(mac, module_id, cc_idP);
|
||||||
|
configure_current_BWP(mac, scc, NULL);
|
||||||
|
|
||||||
|
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
||||||
|
int num_slots_ul = nr_slots_per_frame[mac->mib->subCarrierSpacingCommon];
|
||||||
|
if(cfg->cell_config.frame_duplex_type == TDD){
|
||||||
|
num_slots_ul = scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSlots;
|
||||||
|
if (scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols > 0) {
|
||||||
|
num_slots_ul++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG_I(NR_MAC, "Initializing ul_config_request. num_slots_ul = %d\n", num_slots_ul);
|
||||||
|
mac->ul_config_request = calloc(num_slots_ul, sizeof(*mac->ul_config_request));
|
||||||
|
for (int i=0; i<num_slots_ul; i++)
|
||||||
|
pthread_mutex_init(&(mac->ul_config_request[i].mutex_ul_config), NULL);
|
||||||
|
|
||||||
|
int num_slots_dl = nr_slots_per_frame[mac->mib->subCarrierSpacingCommon];
|
||||||
|
if (cfg->cell_config.frame_duplex_type == TDD) {
|
||||||
|
num_slots_dl = scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofDownlinkSlots;
|
||||||
|
if (scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofDownlinkSymbols > 0) {
|
||||||
|
num_slots_dl++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG_I(NR_MAC, "Initializing dl_config_request. num_slots_dl = %d\n", num_slots_dl);
|
||||||
|
mac->dl_config_request = realloc(mac->dl_config_request, num_slots_dl*sizeof(*mac->dl_config_request));
|
||||||
|
memset(mac->dl_config_request, 0, num_slots_dl*sizeof(fapi_nr_dl_config_request_t));
|
||||||
|
|
||||||
|
// Setup the SSB to Rach Occasionsif (cell_group_config->spCellConfig) { mapping according to the config
|
||||||
|
build_ssb_to_ro_map(mac);
|
||||||
|
if (!get_softmodem_params()->emulate_l1)
|
||||||
|
mac->if_module->phy_config_request(&mac->phy_config);
|
||||||
|
mac->phy_config_request_sent = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_rrc_mac_config_req_mcg(module_id_t module_id,
|
||||||
|
int cc_idP,
|
||||||
|
uint8_t gNB_index,
|
||||||
|
NR_CellGroupConfig_t *cell_group_config)
|
||||||
|
{
|
||||||
|
LOG_I(MAC,"Applying CellGroupConfig from gNodeB\n");
|
||||||
|
AssertFatal(cell_group_config, "CellGroupConfig should not be NULL\n");
|
||||||
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
|
mac->cg = cell_group_config;
|
||||||
|
if (cell_group_config->spCellConfig)
|
||||||
|
mac->servCellIndex = cell_group_config->spCellConfig->servCellIndex ? *cell_group_config->spCellConfig->servCellIndex : 0;
|
||||||
|
else
|
||||||
|
mac->servCellIndex = 0;
|
||||||
|
|
||||||
|
mac->scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
|
||||||
|
mac->scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
|
||||||
|
mac->BSR_reporting_active = NR_BSR_TRIGGER_NONE;
|
||||||
|
LOG_D(MAC, "[UE %d]: periodic BSR %d (SF), retx BSR %d (SF)\n",
|
||||||
|
module_id,
|
||||||
|
mac->scheduling_info.periodicBSR_SF,
|
||||||
|
mac->scheduling_info.retxBSR_SF);
|
||||||
|
|
||||||
|
configure_current_BWP(mac, NULL, cell_group_config);
|
||||||
|
config_control_ue(mac);
|
||||||
|
|
||||||
|
RA_config_t *ra = &mac->ra;
|
||||||
|
if (cell_group_config->spCellConfig && cell_group_config->spCellConfig->reconfigurationWithSync) {
|
||||||
|
LOG_A(NR_MAC, "Received the reconfigurationWithSync in %s\n", __FUNCTION__);
|
||||||
|
if (cell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated) {
|
||||||
|
ra->rach_ConfigDedicated = cell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink;
|
||||||
|
}
|
||||||
|
mac->scc = cell_group_config->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
|
||||||
|
mac->nr_band = *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
||||||
|
if (mac->scc_SIB) {
|
||||||
|
free(mac->scc_SIB);
|
||||||
|
mac->scc_SIB = NULL;
|
||||||
|
}
|
||||||
|
int num_slots = mac->scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSlots;
|
||||||
|
if (mac->scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols > 0) {
|
||||||
|
num_slots++;
|
||||||
|
}
|
||||||
|
mac->state = UE_NOT_SYNC;
|
||||||
|
mac->ra.ra_state = RA_UE_IDLE;
|
||||||
|
mac->physCellId = *mac->scc->physCellId;
|
||||||
|
if (!get_softmodem_params()->emulate_l1) {
|
||||||
|
mac->synch_request.Mod_id = module_id;
|
||||||
|
mac->synch_request.CC_id = cc_idP;
|
||||||
|
mac->synch_request.synch_req.target_Nid_cell = mac->physCellId;
|
||||||
|
mac->if_module->synch_request(&mac->synch_request);
|
||||||
|
}
|
||||||
|
mac->ul_config_request = calloc(num_slots, sizeof(*mac->ul_config_request));
|
||||||
|
config_common_ue(mac, module_id, cc_idP);
|
||||||
|
mac->crnti = cell_group_config->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
||||||
|
LOG_I(MAC, "Configuring CRNTI %x\n", mac->crnti);
|
||||||
|
|
||||||
|
nr_ue_init_mac(module_id);
|
||||||
|
if (!get_softmodem_params()->emulate_l1) {
|
||||||
|
mac->if_module->phy_config_request(&mac->phy_config);
|
||||||
|
mac->phy_config_request_sent = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the SSB to Rach Occasions mapping according to the config
|
||||||
|
build_ssb_to_ro_map(mac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_rrc_mac_config_req_scg(module_id_t module_id,
|
||||||
|
int cc_idP,
|
||||||
|
uint8_t gNB_index,
|
||||||
|
NR_CellGroupConfig_t *scell_group_config)
|
||||||
{
|
{
|
||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
RA_config_t *ra = &mac->ra;
|
RA_config_t *ra = &mac->ra;
|
||||||
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
|
||||||
|
|
||||||
if (mac->dl_config_request == NULL) // for SIB1 reception
|
AssertFatal(scell_group_config == NULL, "scell_group_config cannot be NULL\n");
|
||||||
mac->dl_config_request = calloc(NR_MAX_SLOTS_PER_FRAME, sizeof(*mac->dl_config_request));
|
|
||||||
|
|
||||||
// TODO do something FAPI-like P5 L1/L2 config interface in config_si, config_mib, etc.
|
mac->cg = scell_group_config;
|
||||||
|
mac->servCellIndex = *scell_group_config->spCellConfig->servCellIndex;
|
||||||
if(mibP != NULL){
|
if (scell_group_config->spCellConfig->reconfigurationWithSync) {
|
||||||
mac->mib = mibP; // update by every reception
|
if (scell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated) {
|
||||||
mac->phy_config.Mod_id = module_id;
|
ra->rach_ConfigDedicated = scell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink;
|
||||||
mac->phy_config.CC_id = cc_idP;
|
}
|
||||||
|
mac->scc = scell_group_config->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
|
||||||
|
mac->nr_band = *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
||||||
|
mac->physCellId = *mac->scc->physCellId;
|
||||||
|
config_common_ue(mac,module_id,cc_idP);
|
||||||
|
mac->crnti = scell_group_config->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
||||||
|
LOG_I(MAC,"Configuring CRNTI %x\n",mac->crnti);
|
||||||
}
|
}
|
||||||
AssertFatal(scell_group_config == NULL || cell_group_config == NULL,
|
configure_current_BWP(mac, NULL, scell_group_config);
|
||||||
"both scell_group_config and cell_group_config cannot be non-NULL\n");
|
config_control_ue(mac);
|
||||||
|
// Setup the SSB to Rach Occasions mapping according to the config
|
||||||
if (sccP != NULL) {
|
build_ssb_to_ro_map(mac);
|
||||||
|
|
||||||
mac->scc_SIB = sccP;
|
|
||||||
mac->nr_band = *sccP->downlinkConfigCommon.frequencyInfoDL.frequencyBandList.list.array[0]->freqBandIndicatorNR;
|
|
||||||
config_common_ue_sa(mac, module_id, cc_idP);
|
|
||||||
configure_current_BWP(mac, sccP, NULL);
|
|
||||||
|
|
||||||
int num_slots_ul = nr_slots_per_frame[mac->mib->subCarrierSpacingCommon];
|
|
||||||
if(cfg->cell_config.frame_duplex_type == TDD){
|
|
||||||
num_slots_ul = mac->scc_SIB->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSlots;
|
|
||||||
if (mac->scc_SIB->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols > 0) {
|
|
||||||
num_slots_ul++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LOG_I(NR_MAC, "Initializing ul_config_request. num_slots_ul = %d\n", num_slots_ul);
|
|
||||||
mac->ul_config_request = calloc(num_slots_ul, sizeof(*mac->ul_config_request));
|
|
||||||
for (int i=0; i<num_slots_ul; i++)
|
|
||||||
pthread_mutex_init(&(mac->ul_config_request[i].mutex_ul_config), NULL);
|
|
||||||
|
|
||||||
int num_slots_dl = nr_slots_per_frame[mac->mib->subCarrierSpacingCommon];
|
|
||||||
if (cfg->cell_config.frame_duplex_type == TDD) {
|
|
||||||
num_slots_dl = mac->scc_SIB->tdd_UL_DL_ConfigurationCommon->pattern1.nrofDownlinkSlots;
|
|
||||||
if (mac->scc_SIB->tdd_UL_DL_ConfigurationCommon->pattern1.nrofDownlinkSymbols > 0) {
|
|
||||||
num_slots_dl++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LOG_I(NR_MAC, "Initializing dl_config_request. num_slots_dl = %d\n", num_slots_dl);
|
|
||||||
mac->dl_config_request = realloc(mac->dl_config_request, num_slots_dl*sizeof(*mac->dl_config_request));
|
|
||||||
memset(mac->dl_config_request, 0, num_slots_dl*sizeof(fapi_nr_dl_config_request_t));
|
|
||||||
|
|
||||||
// Setup the SSB to Rach Occasionsif (cell_group_config->spCellConfig) { mapping according to the config
|
|
||||||
build_ssb_to_ro_map(mac);//->scc, mac->phy_config.config_req.cell_config.frame_duplex_type);
|
|
||||||
if (!get_softmodem_params()->emulate_l1)
|
|
||||||
mac->if_module->phy_config_request(&mac->phy_config);
|
|
||||||
mac->phy_config_request_sent = true;
|
|
||||||
}
|
|
||||||
if(scell_group_config != NULL ){
|
|
||||||
mac->cg = scell_group_config;
|
|
||||||
mac->servCellIndex = *scell_group_config->spCellConfig->servCellIndex;
|
|
||||||
if (scell_group_config->spCellConfig->reconfigurationWithSync) {
|
|
||||||
if (scell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated) {
|
|
||||||
ra->rach_ConfigDedicated = scell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink;
|
|
||||||
}
|
|
||||||
mac->scc = scell_group_config->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
|
|
||||||
mac->nr_band = *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
|
||||||
mac->physCellId = *mac->scc->physCellId;
|
|
||||||
config_common_ue(mac,module_id,cc_idP);
|
|
||||||
mac->crnti = scell_group_config->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
|
||||||
LOG_I(MAC,"Configuring CRNTI %x\n",mac->crnti);
|
|
||||||
}
|
|
||||||
configure_current_BWP(mac, NULL, scell_group_config);
|
|
||||||
config_control_ue(mac);
|
|
||||||
// Setup the SSB to Rach Occasions mapping according to the config
|
|
||||||
build_ssb_to_ro_map(mac);
|
|
||||||
|
|
||||||
} else if (cell_group_config != NULL) {
|
|
||||||
LOG_I(MAC,"Applying CellGroupConfig from gNodeB\n");
|
|
||||||
mac->cg = cell_group_config;
|
|
||||||
if (cell_group_config->spCellConfig)
|
|
||||||
mac->servCellIndex = cell_group_config->spCellConfig->servCellIndex ? *cell_group_config->spCellConfig->servCellIndex : 0;
|
|
||||||
else
|
|
||||||
mac->servCellIndex = 0;
|
|
||||||
|
|
||||||
mac->scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
|
|
||||||
mac->scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
|
|
||||||
mac->BSR_reporting_active = NR_BSR_TRIGGER_NONE;
|
|
||||||
LOG_D(MAC, "[UE %d]: periodic BSR %d (SF), retx BSR %d (SF)\n",
|
|
||||||
module_id,
|
|
||||||
mac->scheduling_info.periodicBSR_SF,
|
|
||||||
mac->scheduling_info.retxBSR_SF);
|
|
||||||
|
|
||||||
configure_current_BWP(mac, NULL, cell_group_config);
|
|
||||||
config_control_ue(mac);
|
|
||||||
|
|
||||||
if (cell_group_config->spCellConfig && cell_group_config->spCellConfig->reconfigurationWithSync) {
|
|
||||||
LOG_A(NR_MAC, "Received the reconfigurationWithSync in %s\n", __FUNCTION__);
|
|
||||||
if (cell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated) {
|
|
||||||
ra->rach_ConfigDedicated = cell_group_config->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink;
|
|
||||||
}
|
|
||||||
mac->scc = cell_group_config->spCellConfig->reconfigurationWithSync->spCellConfigCommon;
|
|
||||||
mac->nr_band = *mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
|
||||||
if (mac->scc_SIB) {
|
|
||||||
free(mac->scc_SIB);
|
|
||||||
mac->scc_SIB = NULL;
|
|
||||||
}
|
|
||||||
int num_slots = mac->scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSlots;
|
|
||||||
if (mac->scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols > 0) {
|
|
||||||
num_slots++;
|
|
||||||
}
|
|
||||||
mac->state = UE_NOT_SYNC;
|
|
||||||
mac->ra.ra_state = RA_UE_IDLE;
|
|
||||||
mac->physCellId = *mac->scc->physCellId;
|
|
||||||
if (!get_softmodem_params()->emulate_l1) {
|
|
||||||
mac->synch_request.Mod_id = module_id;
|
|
||||||
mac->synch_request.CC_id = cc_idP;
|
|
||||||
mac->synch_request.synch_req.target_Nid_cell = mac->physCellId;
|
|
||||||
mac->if_module->synch_request(&mac->synch_request);
|
|
||||||
}
|
|
||||||
mac->ul_config_request = calloc(num_slots, sizeof(*mac->ul_config_request));
|
|
||||||
config_common_ue(mac, module_id, cc_idP);
|
|
||||||
mac->crnti = cell_group_config->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
|
||||||
LOG_I(MAC, "Configuring CRNTI %x\n", mac->crnti);
|
|
||||||
|
|
||||||
nr_ue_init_mac(module_id);
|
|
||||||
if (!get_softmodem_params()->emulate_l1) {
|
|
||||||
mac->if_module->phy_config_request(&mac->phy_config);
|
|
||||||
mac->phy_config_request_sent = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup the SSB to Rach Occasions mapping according to the config
|
|
||||||
build_ssb_to_ro_map(mac);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ typedef struct {
|
|||||||
long physCellId;
|
long physCellId;
|
||||||
//// MAC config
|
//// MAC config
|
||||||
int first_sync_frame;
|
int first_sync_frame;
|
||||||
bool sib1_decoded;
|
bool get_sib1;
|
||||||
NR_DRX_Config_t *drx_Config;
|
NR_DRX_Config_t *drx_Config;
|
||||||
NR_SchedulingRequestConfig_t *schedulingRequestConfig;
|
NR_SchedulingRequestConfig_t *schedulingRequestConfig;
|
||||||
NR_BSR_Config_t *bsr_Config;
|
NR_BSR_Config_t *bsr_Config;
|
||||||
|
|||||||
@@ -91,22 +91,26 @@ int nr_rrc_mac_config_req_ue_logicalChannelBearer(module_id_t module_id,
|
|||||||
long logicalChannelIdentity,
|
long logicalChannelIdentity,
|
||||||
bool status);
|
bool status);
|
||||||
|
|
||||||
/**\brief primitive from RRC layer to MAC layer for configuration L1/L2, now supported 4 rrc messages: MIB, cell_group_config for MAC/PHY, spcell_config(serving cell config)
|
void nr_rrc_mac_config_req_scg(module_id_t module_id,
|
||||||
\param module_id module id
|
int cc_idP,
|
||||||
\param cc_id component carrier id
|
uint8_t gNB_index,
|
||||||
\param gNB_index gNB index
|
NR_CellGroupConfig_t *scell_group_config);
|
||||||
\param mibP pointer to RRC message MIB
|
|
||||||
\param sccP pointer to ServingCellConfigCommon structure,
|
void nr_rrc_mac_config_req_mcg(module_id_t module_id,
|
||||||
\param spcell_configP pointer to RRC message serving cell config*/
|
int cc_idP,
|
||||||
int nr_rrc_mac_config_req_ue(
|
uint8_t gNB_index,
|
||||||
module_id_t module_id,
|
NR_CellGroupConfig_t *scell_group_config);
|
||||||
int cc_idP,
|
|
||||||
uint8_t gNB_index,
|
void nr_rrc_mac_config_req_mib(module_id_t module_id,
|
||||||
NR_MIB_t *mibP,
|
uint8_t gNB_index,
|
||||||
NR_ServingCellConfigCommonSIB_t *sccP,
|
int cc_idP,
|
||||||
NR_CellGroupConfig_t *cell_group_config,
|
NR_MIB_t *mibP,
|
||||||
NR_CellGroupConfig_t *scell_group_config
|
bool sched_sib1);
|
||||||
);
|
|
||||||
|
void nr_rrc_mac_config_req_sib1(module_id_t module_id,
|
||||||
|
int cc_idP,
|
||||||
|
uint8_t gNB_index,
|
||||||
|
NR_ServingCellConfigCommonSIB_t *scc);
|
||||||
|
|
||||||
/**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/
|
/**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/
|
||||||
NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst);
|
NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst);
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
|||||||
|
|
||||||
if (rrc_inst && rrc_inst->scell_group_config) {
|
if (rrc_inst && rrc_inst->scell_group_config) {
|
||||||
|
|
||||||
nr_rrc_mac_config_req_ue(0,0,0,NULL,NULL,NULL,rrc_inst->scell_group_config);
|
nr_rrc_mac_config_req_scg(0, 0, 0, rrc_inst->scell_group_config);
|
||||||
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
||||||
if (IS_SOFTMODEM_NOS1){
|
if (IS_SOFTMODEM_NOS1){
|
||||||
// get default noS1 configuration
|
// get default noS1 configuration
|
||||||
@@ -95,7 +95,6 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_I(MAC,"Running without CellGroupConfig\n");
|
LOG_I(MAC,"Running without CellGroupConfig\n");
|
||||||
nr_rrc_mac_config_req_ue(0,0,0,NULL,NULL,NULL,NULL);
|
|
||||||
if(get_softmodem_params()->sa == 1) {
|
if(get_softmodem_params()->sa == 1) {
|
||||||
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ void nr_ue_init_mac(module_id_t module_idP)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mac->first_sync_frame = -1;
|
mac->first_sync_frame = -1;
|
||||||
mac->sib1_decoded = false;
|
mac->get_sib1 = false;
|
||||||
mac->phy_config_request_sent = false;
|
mac->phy_config_request_sent = false;
|
||||||
mac->state = UE_NOT_SYNC;
|
mac->state = UE_NOT_SYNC;
|
||||||
memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
|
memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
|
||||||
@@ -323,7 +323,7 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
|
|||||||
else
|
else
|
||||||
ssb_sc_offset_norm = ssb_subcarrier_offset;
|
ssb_sc_offset_norm = ssb_subcarrier_offset;
|
||||||
|
|
||||||
if (!mac->sib1_decoded) {
|
if (mac->get_sib1) {
|
||||||
nr_ue_sib1_scheduler(module_id,
|
nr_ue_sib1_scheduler(module_id,
|
||||||
cc_id,
|
cc_id,
|
||||||
ssb_start_symbol,
|
ssb_start_symbol,
|
||||||
@@ -361,8 +361,6 @@ int8_t nr_ue_decode_BCCH_DL_SCH(module_id_t module_id,
|
|||||||
uint32_t pdu_len) {
|
uint32_t pdu_len) {
|
||||||
if(ack_nack) {
|
if(ack_nack) {
|
||||||
LOG_D(NR_MAC, "Decoding NR-BCCH-DL-SCH-Message (SIB1 or SI)\n");
|
LOG_D(NR_MAC, "Decoding NR-BCCH-DL-SCH-Message (SIB1 or SI)\n");
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
|
||||||
mac->sib1_decoded = true;
|
|
||||||
nr_mac_rrc_data_ind_ue(module_id, cc_id, gNB_index, 0, 0, 0, NR_BCCH_DL_SCH, (uint8_t *) pduP, pdu_len);
|
nr_mac_rrc_data_ind_ue(module_id, cc_id, gNB_index, 0, 0, 0, NR_BCCH_DL_SCH, (uint8_t *) pduP, pdu_len);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -672,7 +670,10 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
|||||||
NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config = mac->type0_PDCCH_CSS_config;
|
NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config = mac->type0_PDCCH_CSS_config;
|
||||||
mux_pattern = type0_PDCCH_CSS_config.type0_pdcch_ss_mux_pattern;
|
mux_pattern = type0_PDCCH_CSS_config.type0_pdcch_ss_mux_pattern;
|
||||||
dl_config->dl_config_list[dl_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH;
|
dl_config->dl_config_list[dl_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH;
|
||||||
dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon;
|
if(mac->frequency_range == FR1)
|
||||||
|
dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon;
|
||||||
|
else
|
||||||
|
dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon + 2;
|
||||||
if (pdsch_config) pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL; // For PDSCH with mapping type A, the UE shall assume dmrs-AdditionalPosition='pos2'
|
if (pdsch_config) pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL; // For PDSCH with mapping type A, the UE shall assume dmrs-AdditionalPosition='pos2'
|
||||||
} else {
|
} else {
|
||||||
dlsch_config_pdu_1_0->SubcarrierSpacing = current_DL_BWP->scs;
|
dlsch_config_pdu_1_0->SubcarrierSpacing = current_DL_BWP->scs;
|
||||||
|
|||||||
+17
-21
@@ -285,6 +285,10 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(const module_id_t module_id, NR_RRCR
|
|||||||
NR_UE_rrc_inst[module_id].cell_group_config = cellGroupConfig;
|
NR_UE_rrc_inst[module_id].cell_group_config = cellGroupConfig;
|
||||||
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
||||||
}
|
}
|
||||||
|
if (get_softmodem_params()->nsa) {
|
||||||
|
nr_rrc_mac_config_req_scg(0, 0, 0, cellGroupConfig);
|
||||||
|
LOG_D(NR_RRC, "Filled scc now \n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
nr_rrc_ue_decode_secondary_cellgroup_config(module_id,
|
nr_rrc_ue_decode_secondary_cellgroup_config(module_id,
|
||||||
@@ -312,7 +316,6 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(const module_id_t module_id, NR_RRCR
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//nr_rrc_mac_config_req_ue();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -340,10 +343,6 @@ int8_t nr_rrc_ue_process_scg_config(const module_id_t module_id, NR_CellGroupCon
|
|||||||
}else{
|
}else{
|
||||||
// maintain list
|
// maintain list
|
||||||
if(cell_group_config->spCellConfig != NULL){
|
if(cell_group_config->spCellConfig != NULL){
|
||||||
if (get_softmodem_params()->nsa) {
|
|
||||||
nr_rrc_mac_config_req_ue(0, 0, 0, NULL, NULL, cell_group_config, NULL);
|
|
||||||
LOG_D(NR_RRC, "Filled scc now \n");
|
|
||||||
}
|
|
||||||
if(cell_group_config->spCellConfig->spCellConfigDedicated != NULL){
|
if(cell_group_config->spCellConfig->spCellConfigDedicated != NULL){
|
||||||
// process element of list to be add by RRC message
|
// process element of list to be add by RRC message
|
||||||
if(cell_group_config->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList != NULL){
|
if(cell_group_config->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList != NULL){
|
||||||
@@ -600,7 +599,10 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(const module_id_t module_id, const u
|
|||||||
NR_UE_rrc_inst[module_id].mib = bcch_message->message.choice.mib;
|
NR_UE_rrc_inst[module_id].mib = bcch_message->message.choice.mib;
|
||||||
bcch_message->message.choice.mib = NULL;
|
bcch_message->message.choice.mib = NULL;
|
||||||
|
|
||||||
nr_rrc_mac_config_req_ue(0, 0, 0, NR_UE_rrc_inst[module_id].mib, NULL, NULL, NULL);
|
NR_SIB1_t *sib1 = NR_UE_rrc_inst[module_id].sib1[gNB_index];
|
||||||
|
// if no sib1 because not acquired yet or expired, get a new one
|
||||||
|
bool get_sib1 = sib1 ? false : true;
|
||||||
|
nr_rrc_mac_config_req_mib(module_id, gNB_index, 0, NR_UE_rrc_inst[module_id].mib, get_sib1);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_BCCH_BCH_Message, bcch_message);
|
ASN_STRUCT_FREE(asn_DEF_NR_BCCH_BCH_Message, bcch_message);
|
||||||
@@ -1210,8 +1212,8 @@ int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id,
|
|||||||
}
|
}
|
||||||
// take ServingCellConfigCommon and configure L1/L2
|
// take ServingCellConfigCommon and configure L1/L2
|
||||||
NR_UE_rrc_inst[module_id].servingCellConfigCommonSIB = sib1->servingCellConfigCommon;
|
NR_UE_rrc_inst[module_id].servingCellConfigCommonSIB = sib1->servingCellConfigCommon;
|
||||||
nr_rrc_mac_config_req_ue(module_id,0,0,NULL,sib1->servingCellConfigCommon,NULL,NULL);
|
nr_rrc_mac_config_req_sib1(module_id, 0, gNB_index, sib1->servingCellConfigCommon);
|
||||||
nr_rrc_ue_generate_ra_msg(module_id,gNB_index);
|
nr_rrc_ue_generate_ra_msg(module_id, gNB_index);
|
||||||
} else {
|
} else {
|
||||||
LOG_E(NR_RRC, "SIB1 not decoded\n");
|
LOG_E(NR_RRC, "SIB1 not decoded\n");
|
||||||
}
|
}
|
||||||
@@ -1256,12 +1258,9 @@ int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void
|
void nr_rrc_ue_process_masterCellGroup(const protocol_ctxt_t *const ctxt_pP,
|
||||||
nr_rrc_ue_process_masterCellGroup(
|
uint8_t gNB_index,
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
OCTET_STRING_t *masterCellGroup)
|
||||||
uint8_t gNB_index,
|
|
||||||
OCTET_STRING_t *masterCellGroup
|
|
||||||
)
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
NR_CellGroupConfig_t *cellGroupConfig=NULL;
|
NR_CellGroupConfig_t *cellGroupConfig=NULL;
|
||||||
@@ -1358,7 +1357,7 @@ nr_rrc_ue_process_masterCellGroup(
|
|||||||
NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config = cellGroupConfig;
|
NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config = cellGroupConfig;
|
||||||
}
|
}
|
||||||
LOG_D(RRC,"Sending CellGroupConfig to MAC\n");
|
LOG_D(RRC,"Sending CellGroupConfig to MAC\n");
|
||||||
nr_rrc_mac_config_req_ue(ctxt_pP->module_id,0,0,NULL,NULL,cellGroupConfig,NULL);
|
nr_rrc_mac_config_req_mcg(ctxt_pP->module_id, 0, 0, cellGroupConfig);
|
||||||
//TODO (configure the SpCell as specified in 5.3.5.5.7)
|
//TODO (configure the SpCell as specified in 5.3.5.5.7)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2136,12 +2135,9 @@ nr_rrc_ue_establish_srb2(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
static void
|
static void rrc_ue_process_rrcReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
||||||
rrc_ue_process_rrcReconfiguration(
|
NR_RRCReconfiguration_t *rrcReconfiguration,
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
uint8_t gNB_index)
|
||||||
NR_RRCReconfiguration_t *rrcReconfiguration,
|
|
||||||
uint8_t gNB_index
|
|
||||||
)
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
LOG_I(NR_RRC, "[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing RRCReconfiguration (gNB %d)\n",
|
LOG_I(NR_RRC, "[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing RRCReconfiguration (gNB %d)\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user