From b2bdf7eb9a56cb2af08ce686b942e9dd14ea1364 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Wed, 11 Sep 2019 10:57:31 +0200 Subject: [PATCH] temporary commit --- cmake_targets/CMakeLists.txt | 3 +- executables/nr-gnb.c | 13 +- .../PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h | 14 +- .../CODING/nrLDPC_decoder/nrLDPC_decoder.c | 2 +- .../PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h | 341 ++++++++++++++---- .../PHY/CODING/nrLDPC_decoder/nrLDPC_types.h | 1 + openair2/RRC/NR/nr_rrc_defs.h | 4 + openair2/RRC/NR/nr_rrc_proto.h | 33 +- openair2/RRC/NR/rrc_gNB_nsa.c | 30 +- 9 files changed, 361 insertions(+), 80 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 5e4e382d3d..5083a3c1ca 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -185,7 +185,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${CMAKE_CU # set a flag for changes in the source code # these changes are related to hardcoded path to include .h files set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O3") set(GIT_BRANCH "UNKNOWN") @@ -1590,6 +1590,7 @@ set(L2_NR_SRC ${NR_RRC_DIR}/L2_nr_interface.c ${NR_RRC_DIR}/nr_rrc_config.c ${NR_RRC_DIR}/rrc_gNB_nsa.c + ${NR_RRC_DIR}/rrc_gNB_internode.c ${NR_RRC_DIR}/rrc_gNB_reconfig.c ${NR_RRC_DIR}/rrc_gNB_UE_context.c ) diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index 89aa171ff9..285a110793 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -886,15 +886,18 @@ void init_gNB(int single_thread_flag,int wait_for_sync) { PHY_VARS_gNB *gNB; LOG_I(PHY,"[nr-softmodem.c] gNB (%p) structure about to allocated RC.nb_nr_L1_inst:%d\n",RC.gNB,RC.nb_nr_L1_inst); - if (RC.gNB == NULL) RC.gNB = (PHY_VARS_gNB **) malloc((1+RC.nb_nr_L1_inst)*sizeof(PHY_VARS_gNB *)); + if (RC.gNB == NULL) { + RC.gNB = (PHY_VARS_gNB **) malloc((1+RC.nb_nr_L1_inst)*sizeof(PHY_VARS_gNB *)); + for (inst=0; instabstraction_flag = 0; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h index 5b96d6226e..a9d10a720e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h @@ -87,23 +87,29 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr // Set of results pointer to correct BN address p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); + __m256i *pj0 = &p_cnProcBuf[lut_idxCnProcG3[j][0]]; + __m256i *pj1 = &p_cnProcBuf[lut_idxCnProcG3[j][1]]; + // Loop over CNs for (i=0; ibnProcBufRes; int8_t* p_cnProcBuf; - const uint32_t* p_lut_cn2bn; + uint32_t* p_lut_cn2bn; uint32_t bitOffsetInGroup; uint32_t i; uint32_t j; @@ -582,14 +603,228 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf M = lut_numCnInCnGroups[0]*Z; bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; - for (j=0; j<2; j++) + for (j=0;j<2; j++) { p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; + p_lut_cn2bn = bn2cnmap(p_lut_cn2bn,p_cnProcBuf,bnProcBufRes,M>>4); + /* for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; i>4); + /* + for (i=0; icn2bnProcBuf; + const uint32_t* lut_cn2bnProcBuf2 = p_lut->cn2bnProcBuf2; + const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; + + uint32_t* p_lut_cn2bn; + uint32_t bitOffsetInGroup; + uint32_t i; + uint32_t j; + uint32_t M; + + // For CN groups 3 to 19 no need to send the last BN back since it's single edge + // and BN processing does not change the value already in the CN proc buf + + // ===================================================================== + // CN group with 3 BNs + + p_lut_cn2bn = &lut_cn2bnProcBuf[0]; + + M = lut_numCnInCnGroups[0]*Z; + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; + + for (j=0;j<2; j++) + { + printf("******3 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[0] + j*bitOffsetInGroup); + + memcpy_printer(p_lut_cn2bn,lut_startAddrCnGroups[0] + j*bitOffsetInGroup,M); + } // ===================================================================== @@ -601,135 +836,111 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf for (j=0; j<3; j++) { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; - - for (i=0; ilist.size != 2, "UE_CapabilityRAT_ContainerList->list.size %d != 2\n",UE_CapabilityRAT_ContainerList->list.size); + if (UE_CapabilityRAT_ContainerList->list.array[0]->rat_Type == NR_RAT_Type_nr) ueCapabilityRAT_Container_nr = &UE_CapabilityRAT_ContainerList->list.array[0]->ue_CapabilityRAT_Container; + else if (UE_CapabilityRAT_ContainerList->list.array[0]->rat_Type == NR_RAT_Type_eutra_nr) ueCapabilityRAT_Container_MRDC = &UE_CapabilityRAT_ContainerList->list.array[0]->ue_CapabilityRAT_Container; + + if (UE_CapabilityRAT_ContainerList->list.array[1]->rat_Type == NR_RAT_Type_nr) ueCapabilityRAT_Container_nr = &UE_CapabilityRAT_ContainerList->list.array[1]->ue_CapabilityRAT_Container; + else if (UE_CapabilityRAT_ContainerList->list.array[1]->rat_Type == NR_RAT_Type_eutra_nr) ueCapabilityRAT_Container_MRDC = &UE_CapabilityRAT_ContainerList->list.array[1]->ue_CapabilityRAT_Container; + AssertFatal(ueCapabilityRAT_Container_nr!=NULL,"ueCapabilityRAT_Container_nr is NULL\n"); AssertFatal(ueCapabilityRAT_Container_MRDC!=NULL,"ueCapabilityRAT_Container_MRDC is NULL\n"); @@ -83,9 +96,10 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc,BIT_STRING_t *ueCapabilityRAT_C xer_fprint(stdout, &asn_DEF_NR_UE_MRDC_Capability, ue_context_p->ue_context.UE_Capability_MRDC); } + rrc_add_nsa_user(rrc,ue_context_p); } -void rrc_add_nsa_user(gNB_RRC_INST *rrc) { +void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_p) { // generate nr-Config-r15 containers for LTE RRC : inside message for X2 EN-DC (CG-Config Message from 38.331) @@ -104,7 +118,17 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc) { carrier->reconfig[rrc->Nb_ue]->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration; NR_RRCReconfiguration_IEs_t *reconfig_ies=calloc(1,sizeof(NR_RRCReconfiguration_IEs_t)); carrier->reconfig[rrc->Nb_ue]->criticalExtensions.choice.rrcReconfiguration = reconfig_ies; - fill_default_reconfig(carrier->ServingCellConfigCommon,reconfig_ies); + fill_default_reconfig(carrier->ServingCellConfigCommon, + reconfig_ies, + carrier->secondaryCellGroup[rrc->Nb_ue], + carrier->n_physical_antenna_ports, + carrier->initial_csi_index[rrc->Nb_ue]); + carrier->rb_config[rrc->Nb_ue] = calloc(1,sizeof(NR_RadioBearerConfig_t)); + fill_default_rbconfig(rrc,carrier->rb_config[rrc->Nb_ue]); + NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config)); + memset((void*)CG_Config,0,sizeof(*CG_Config)); + generate_CG_Config(rrc,CG_Config,carrier->reconfig[rrc->Nb_ue],carrier->rb_config[rrc->Nb_ue]); + // Send to X2 entity to transport to MeNB rrc->Nb_ue++; }