diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index 1dff70618e..19db7e6818 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -560,6 +560,7 @@ typedef struct NR_UE_UL_BWP { uint16_t BWPSize; uint16_t BWPStart; NR_RACH_ConfigCommon_t *rach_ConfigCommon; + NR_MsgA_ConfigCommon_r16_t *msgA_ConfigCommon_r16; NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList_Common; NR_ConfiguredGrantConfig_t *configuredGrantConfig; NR_PUSCH_Config_t *pusch_Config; @@ -630,5 +631,10 @@ typedef struct NR_tda_info { bool valid_tda; } NR_tda_info_t; +typedef enum { + RA_4_STEP = 0, + RA_2_STEP = 1, +} nr_ra_type_t; + #endif /*__LAYER2_MAC_H__ */ diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index c913321f80..8eb6b194dc 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -191,11 +191,6 @@ typedef enum { RE_ESTABLISHMENT } NR_UE_MAC_reset_cause_t; -typedef enum { - RA_2STEP = 0, - RA_4STEP -} nr_ra_type_e; - typedef struct { // after multiplexing buffer remain for each lcid int32_t LCID_buffer_remain; @@ -299,7 +294,7 @@ typedef struct { /// uint8_t RA_SCALING_FACTOR_BI; /// Indicating whether it is 2-step or 4-step RA - nr_ra_type_e RA_TYPE; + nr_ra_type_t RA_TYPE; /// UE configured maximum output power int RA_PCMAX; } NR_PRACH_RESOURCES_t; @@ -312,6 +307,8 @@ typedef struct { nrRA_UE_state_t ra_state; /// RA contention type uint8_t cfra; + /// RA type + nr_ra_type_t ra_type; /// RA rx frame offset: compensate RA rx offset introduced by OAI gNB. uint8_t RA_offset; /// RA-rnti diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c index 6272c4c33f..eadc1677f4 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c @@ -104,15 +104,19 @@ void init_RA(NR_UE_MAC_INST_t *mac, prach_resources->POWER_OFFSET_2STEP_RA = 0; prach_resources->RA_SCALING_FACTOR_BI = 1; + + // Contention Free if (rach_ConfigDedicated) { if (rach_ConfigDedicated->cfra){ - LOG_I(NR_MAC, "Initialization of 2-step contention-free random access procedure\n"); - prach_resources->RA_TYPE = RA_2STEP; + LOG_I(MAC, "Initialization of 4-Step CFRA procedure\n"); + prach_resources->RA_TYPE = RA_4_STEP; + ra->ra_type = RA_4_STEP; ra->cfra = 1; } else if (rach_ConfigDedicated->ext1){ - if (rach_ConfigDedicated->ext1->cfra_TwoStep_r16){ - LOG_I(NR_MAC, "Setting RA type to 2-step...\n"); - prach_resources->RA_TYPE = RA_2STEP; + if (rach_ConfigDedicated->ext1->cfra_TwoStep_r16) { + LOG_I(MAC, "Initialization of 2-Step CFRA procedure\n"); + prach_resources->RA_TYPE = RA_2_STEP; + ra->ra_type = RA_2_STEP; ra->cfra = 1; } else { LOG_E(NR_MAC, "Config not handled\n"); @@ -120,10 +124,20 @@ void init_RA(NR_UE_MAC_INST_t *mac, } else { LOG_E(NR_MAC, "Config not handled\n"); } - } else { - LOG_I(NR_MAC, "Initialization of 4-step contention-based random access procedure\n"); - prach_resources->RA_TYPE = RA_4STEP; + // Contention Based + } else if (mac->current_UL_BWP->msgA_ConfigCommon_r16) { + LOG_I(MAC, "Initialization of 2-Step CBRA procedure\n"); + prach_resources->RA_TYPE = RA_2_STEP; + ra->ra_type = RA_2_STEP; ra->cfra = 0; + } else if (nr_rach_ConfigCommon) { + LOG_I(MAC, "Initialization of 4-Step CBRA procedure\n"); + prach_resources->RA_TYPE = RA_4_STEP; + ra->ra_type = RA_4_STEP; + ra->cfra = 0; + } else { + LOG_E(MAC, "Config not handled\n"); + AssertFatal(false, "In %s: config not handled\n", __FUNCTION__); } switch (rach_ConfigGeneric->powerRampingStep){ // in dB