Commit cca28a0a authored by cig's avatar cig

Moved PRACH PDU struct to NR_UE_PRACH in PHY_VARS_NR_UE:

- now the FAPI interface copies the struct directly to NR_UE_PRACH
- NR_PRACH_CONFIG_COMMON and NR_PRACH_CONFIG_INFO have been removed from FP
parent 6d413e2c
...@@ -156,17 +156,28 @@ typedef struct { ...@@ -156,17 +156,28 @@ typedef struct {
fapi_nr_tx_request_body_t *tx_request_body; fapi_nr_tx_request_body_t *tx_request_body;
} fapi_nr_tx_request_t; } fapi_nr_tx_request_t;
/// This struct replaces:
/// PRACH-ConfigInfo from 38.331 RRC spec
/// PRACH-ConfigSIB or PRACH-Config
typedef struct { typedef struct {
/// PHY cell ID
uint16_t phys_cell_id; uint16_t phys_cell_id;
/// Num PRACH occasions
uint8_t num_prach_ocas; uint8_t num_prach_ocas;
/// PRACH format
uint8_t prach_format; uint8_t prach_format;
/// Num RA
uint8_t num_ra; uint8_t num_ra;
uint8_t prach_start_symbol; uint8_t prach_start_symbol;
/// 38.211 (NCS 38.211 6.3.3.1).
uint16_t num_cs; uint16_t num_cs;
/// Parameter: prach-rootSequenceIndex, see TS 38.211 (6.3.3.2).
uint16_t root_seq_id; uint16_t root_seq_id;
/// Parameter: High-speed-flag, see TS 38.211 (6.3.3.1). 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t restricted_set; uint8_t restricted_set;
/// see TS 38.211 (6.3.3.2).
uint16_t freq_msg1; uint16_t freq_msg1;
//nfapi_nr_ul_beamforming_t beamforming; // nfapi_nr_ul_beamforming_t beamforming;
} fapi_nr_ul_config_prach_pdu; } fapi_nr_ul_config_prach_pdu;
typedef struct { typedef struct {
......
...@@ -77,19 +77,19 @@ void phy_config_sib2_ue(uint8_t Mod_id,int CC_id, ...@@ -77,19 +77,19 @@ void phy_config_sib2_ue(uint8_t Mod_id,int CC_id,
LOG_I(PHY,"[UE%d] Applying radioResourceConfigCommon from eNB%d\n",Mod_id,eNB_id); LOG_I(PHY,"[UE%d] Applying radioResourceConfigCommon from eNB%d\n",Mod_id,eNB_id);
fp->prach_config_common.rootSequenceIndex =radioResourceConfigCommon->prach_Config.rootSequenceIndex; ue->prach_vars[eNB_id]->prach_pdu.root_seq_id =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
fp->prach_config_common.prach_Config_enabled=1; ue->prach_vars[eNB_id]->prach_Config_enabled=1;
fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex; //ue->prach_vars[eNB_id]->prach_pdu.prach_ConfigIndex =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
fp->prach_config_common.prach_ConfigInfo.highSpeedFlag =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag; ue->prach_vars[eNB_id]->prach_pdu.restricted_set =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag;
fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig; ue->prach_vars[eNB_id]->prach_pdu.num_cs =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset; //ue->prach_vars[eNB_id]->prach_pdu.prach_FreqOffset =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset;
compute_prach_seq(fp->prach_config_common.rootSequenceIndex, //compute_prach_seq(fp->prach_config_common.rootSequenceIndex,
fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, // fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, // fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
fp->prach_config_common.prach_ConfigInfo.highSpeedFlag, // fp->prach_config_common.prach_ConfigInfo.highSpeedFlag,
fp->frame_type,ue->X_u); // fp->frame_type,ue->X_u);
...@@ -226,12 +226,12 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_ ...@@ -226,12 +226,12 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_
LOG_I(PHY,"[UE%d] Handover triggered: Applying radioResourceConfigCommon from eNB %d\n", LOG_I(PHY,"[UE%d] Handover triggered: Applying radioResourceConfigCommon from eNB %d\n",
Mod_id,eNB_id); Mod_id,eNB_id);
fp->prach_config_common.rootSequenceIndex =radioResourceConfigCommon->prach_Config.rootSequenceIndex; ue->prach_vars[eNB_id]->prach_pdu.root_seq_id =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
fp->prach_config_common.prach_Config_enabled=1; ue->prach_vars[eNB_id]->prach_Config_enabled=1;
fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex; //ue->prach_vars[eNB_id]->prach_pdu.prach_ConfigIndex =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex;
fp->prach_config_common.prach_ConfigInfo.highSpeedFlag =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->highSpeedFlag; ue->prach_vars[eNB_id]->prach_pdu.restricted_set =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->highSpeedFlag;
fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->zeroCorrelationZoneConfig; ue->prach_vars[eNB_id]->prach_pdu.num_cs =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->zeroCorrelationZoneConfig;
fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_FreqOffset; //ue->prach_vars[eNB_id]->prach_pdu.prach_FreqOffset =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_FreqOffset;
// prach_fmt = get_prach_fmt(radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex,fp->frame_type); // prach_fmt = get_prach_fmt(radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex,fp->frame_type);
// N_ZC = (prach_fmt <4)?839:139; // N_ZC = (prach_fmt <4)?839:139;
...@@ -239,12 +239,12 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_ ...@@ -239,12 +239,12 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_
// prach_root_sequence_map4[fp->prach_config_common.rootSequenceIndex]; // prach_root_sequence_map4[fp->prach_config_common.rootSequenceIndex];
//compute_prach_seq(u,N_ZC, PHY_vars_UE_g[Mod_id]->X_u); //compute_prach_seq(u,N_ZC, PHY_vars_UE_g[Mod_id]->X_u);
compute_prach_seq(PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex, //compute_prach_seq(PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex,
PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex, // PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, // PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag, // PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag,
fp->frame_type, // fp->frame_type,
PHY_vars_UE_g[Mod_id][CC_id]->X_u); // PHY_vars_UE_g[Mod_id][CC_id]->X_u);
fp->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon->deltaPUCCH_Shift; fp->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon->deltaPUCCH_Shift;
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
void dump_nr_prach_config(NR_DL_FRAME_PARMS *frame_parms,uint8_t subframe) { /*void dump_nr_prach_config(NR_DL_FRAME_PARMS *frame_parms,uint8_t subframe) {
FILE *fd; FILE *fd;
...@@ -76,7 +76,7 @@ void dump_nr_prach_config(NR_DL_FRAME_PARMS *frame_parms,uint8_t subframe) { ...@@ -76,7 +76,7 @@ void dump_nr_prach_config(NR_DL_FRAME_PARMS *frame_parms,uint8_t subframe) {
fprintf(fd,"prach_config: n_ra_prboffset = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.msg1_frequencystart); fprintf(fd,"prach_config: n_ra_prboffset = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.msg1_frequencystart);
fclose(fd); fclose(fd);
} }*/
// This function computes the du // This function computes the du
void nr_fill_du(uint16_t N_ZC,uint16_t *prach_root_sequence_map) void nr_fill_du(uint16_t N_ZC,uint16_t *prach_root_sequence_map)
......
...@@ -72,6 +72,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){ ...@@ -72,6 +72,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
NR_DL_FRAME_PARMS *fp=&ue->frame_parms; NR_DL_FRAME_PARMS *fp=&ue->frame_parms;
fapi_nr_config_request_t *nrUE_config = &ue->nrUE_config; fapi_nr_config_request_t *nrUE_config = &ue->nrUE_config;
NR_PRACH_RESOURCES_t *prach_resources = ue->prach_resources[gNB_id]; NR_PRACH_RESOURCES_t *prach_resources = ue->prach_resources[gNB_id];
fapi_nr_ul_config_prach_pdu *prach_pdu = &ue->prach_vars[gNB_id]->prach_pdu;
uint8_t Mod_id, fd_occasion, preamble_index, restricted_set, not_found; uint8_t Mod_id, fd_occasion, preamble_index, restricted_set, not_found;
uint16_t rootSequenceIndex, prach_fmt_id, NCS, *prach_root_sequence_map, preamble_offset; uint16_t rootSequenceIndex, prach_fmt_id, NCS, *prach_root_sequence_map, preamble_offset;
...@@ -89,11 +90,11 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){ ...@@ -89,11 +90,11 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
prach_sequence_length = nrUE_config->prach_config.prach_sequence_length; prach_sequence_length = nrUE_config->prach_config.prach_sequence_length;
N_ZC = (prach_sequence_length == 0) ? 839:139; N_ZC = (prach_sequence_length == 0) ? 839:139;
mu = nrUE_config->prach_config.prach_sub_c_spacing; mu = nrUE_config->prach_config.prach_sub_c_spacing;
restricted_set = fp->prach_config_common.prach_ConfigInfo.highSpeedFlag; restricted_set = prach_pdu->restricted_set;
rootSequenceIndex = fp->prach_config_common.rootSequenceIndex; rootSequenceIndex = prach_pdu->root_seq_id;
n_ra_prb = fp->prach_config_common.prach_ConfigInfo.msg1_frequencystart; n_ra_prb = prach_pdu->freq_msg1;
NCS = fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig; NCS = prach_pdu->num_cs;
prach_fmt_id = prach_resources->prach_format; prach_fmt_id = prach_pdu->prach_format;
preamble_index = 0; //prach_resources->ra_PreambleIndex // temporary hardcoded preamble_index = 0; //prach_resources->ra_PreambleIndex // temporary hardcoded
fd_occasion = 0; fd_occasion = 0;
prach_len = 0; prach_len = 0;
...@@ -135,28 +136,6 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){ ...@@ -135,28 +136,6 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
* NOTE: Restricted set type B is not implemented * NOTE: Restricted set type B is not implemented
*************************************************************************/ *************************************************************************/
// restricted type is hardcoded ('0' for restricted_TypeA; and '1' for restricted_TypeB). FIXME
// uint8_t Ncs_config = fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
// if (prach_fmt_id<3){
// if (restricted_set == 0) {
// NCS = NCS_unrestricted_delta_f_RA_125[Ncs_config];
// } else {
// if (restricted_Type == 0) NCS = NCS_restricted_TypeA_delta_f_RA_125[Ncs_config]; // for TypeA, this is hardcoded. FIXME
// if (restricted_Type == 1) NCS = NCS_restricted_TypeB_delta_f_RA_125[Ncs_config]; // for TypeB, this is hardcoded. FIXME
// }
// }
// if (prach_fmt_id==3){
// if (restricted_set == 0) {
// NCS = NCS_unrestricted_delta_f_RA_5[Ncs_config];
// } else {
// if (restricted_Type == 0) NCS = NCS_restricted_TypeA_delta_f_RA_5[Ncs_config]; // for TypeA, this is hardcoded. FIXME
// if (restricted_Type == 1) NCS = NCS_restricted_TypeB_delta_f_RA_5[Ncs_config]; // for TypeB, this is hardcoded. FIXME
// }
// }
// if (prach_fmt_id>3){
// NCS = NCS_unrestricted_delta_f_RA_15[Ncs_config];
// }
prach_root_sequence_map = (prach_sequence_length == 0) ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc; prach_root_sequence_map = (prach_sequence_length == 0) ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc;
// This is the relative offset (for unrestricted case) in the root sequence table (5.7.2-4 from 36.211) for the given preamble index // This is the relative offset (for unrestricted case) in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
......
...@@ -782,6 +782,8 @@ typedef struct { ...@@ -782,6 +782,8 @@ typedef struct {
int16_t amp; int16_t amp;
int16_t *prachF; int16_t *prachF;
int16_t *prach; int16_t *prach;
fapi_nr_ul_config_prach_pdu prach_pdu;
uint8_t prach_Config_enabled;
} NR_UE_PRACH; } NR_UE_PRACH;
// structure used for multiple SSB detection // structure used for multiple SSB detection
......
...@@ -198,31 +198,6 @@ typedef struct { ...@@ -198,31 +198,6 @@ typedef struct {
nr_reg_t reg_list[NR_NB_REG_PER_CCE]; nr_reg_t reg_list[NR_NB_REG_PER_CCE];
} nr_cce_t; } nr_cce_t;
/// PRACH-ConfigInfo from 38.331 RRC spec
typedef struct {
/// Parameter: prach-ConfigurationIndex, see TS 38.211 (6.3.3.2).
uint8_t prach_ConfigIndex;
/// Parameter: High-speed-flag, see TS 38.211 (6.3.3.1). 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t highSpeedFlag;
/// Restricted Set Config (type A=0 , type B=1) TS 38.211 (6.3.3.1)
uint8_t restrictedSetConfig;
/// 38.211 (NCS 38.211 6.3.3.1).
uint8_t zeroCorrelationZoneConfig;
/// see TS 38.211 (6.3.3.2).
uint8_t msg1_frequencystart;
} NR_PRACH_CONFIG_INFO;
/// PRACH-ConfigSIB or PRACH-Config
typedef struct {
/// Parameter: prach-rootSequenceIndex, see TS 38.211 (6.3.3.2).
uint16_t rootSequenceIndex;
/// prach_Config_enabled=1 means enabled.}
uint8_t prach_Config_enabled;
/// PRACH Configuration Information
NR_PRACH_CONFIG_INFO prach_ConfigInfo;
} NR_PRACH_CONFIG_COMMON;
typedef struct { typedef struct {
/// PRACH format retrieved from prach_ConfigIndex /// PRACH format retrieved from prach_ConfigIndex
uint16_t prach_format; uint16_t prach_format;
...@@ -340,8 +315,6 @@ struct NR_DL_FRAME_PARMS { ...@@ -340,8 +315,6 @@ struct NR_DL_FRAME_PARMS {
uint8_t nb_antennas_rx; uint8_t nb_antennas_rx;
/// Number of common transmit antenna ports in eNodeB (1 or 2) /// Number of common transmit antenna ports in eNodeB (1 or 2)
uint8_t nb_antenna_ports_gNB; uint8_t nb_antenna_ports_gNB;
/// PRACH_CONFIG
NR_PRACH_CONFIG_COMMON prach_config_common;
/// Cyclic Prefix for DL (0=Normal CP, 1=Extended CP) /// Cyclic Prefix for DL (0=Normal CP, 1=Extended CP)
lte_prefix_type_t Ncp; lte_prefix_type_t Ncp;
/// shift of pilot position in one RB /// shift of pilot position in one RB
......
...@@ -114,9 +114,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ ...@@ -114,9 +114,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type, pucch_resource_id, current_harq_pid, format, gNB_id = 0; uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type, pucch_resource_id, current_harq_pid, format, gNB_id = 0;
/* PRACH */ /* PRACH */
NR_DL_FRAME_PARMS *fp;
NR_PRACH_RESOURCES_t *prach_resources; NR_PRACH_RESOURCES_t *prach_resources;
NR_PRACH_CONFIG_COMMON *prach_config_common;
fapi_nr_ul_config_prach_pdu *prach_config_pdu; fapi_nr_ul_config_prach_pdu *prach_config_pdu;
/* PUSCH */ /* PUSCH */
fapi_nr_ul_config_pusch_pdu_rel15_t *pusch_config_pdu; fapi_nr_ul_config_pusch_pdu_rel15_t *pusch_config_pdu;
...@@ -189,19 +187,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ ...@@ -189,19 +187,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
case (FAPI_NR_UL_CONFIG_TYPE_PRACH): case (FAPI_NR_UL_CONFIG_TYPE_PRACH):
// prach config pdu // prach config pdu
fp = &PHY_vars_UE_g[module_id][cc_id]->frame_parms;
prach_resources = PHY_vars_UE_g[module_id][cc_id]->prach_resources[gNB_id]; prach_resources = PHY_vars_UE_g[module_id][cc_id]->prach_resources[gNB_id];
prach_config_common = &fp->prach_config_common;
prach_config_pdu = &ul_config->ul_config_list[i].prach_config_pdu; prach_config_pdu = &ul_config->ul_config_list[i].prach_config_pdu;
memcpy((void*)&(PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->prach_pdu), (void*)prach_config_pdu, sizeof(fapi_nr_ul_config_prach_pdu));
prach_config_common->prach_Config_enabled = 1; PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->prach_Config_enabled = 1;
prach_config_common->rootSequenceIndex = prach_config_pdu->root_seq_id;
prach_config_common->prach_ConfigInfo.zeroCorrelationZoneConfig = prach_config_pdu->num_cs;
prach_config_common->prach_ConfigInfo.highSpeedFlag = prach_config_pdu->restricted_set;
prach_config_common->prach_ConfigInfo.msg1_frequencystart = prach_config_pdu->freq_msg1;
prach_resources->prach_format = prach_config_pdu->prach_format;
break; break;
default: default:
......
...@@ -2266,7 +2266,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, ...@@ -2266,7 +2266,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
/* RACH */ /* RACH */
if ((ue->UE_mode[gNB_id] == PRACH) && (ue->frame_parms.prach_config_common.prach_Config_enabled == 1)) { if ((ue->UE_mode[gNB_id] == PRACH) && (ue->prach_vars[gNB_id]->prach_Config_enabled == 1)) {
nr_ue_prach_procedures(ue, proc, gNB_id, mode); nr_ue_prach_procedures(ue, proc, gNB_id, mode);
} }
else { else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment