diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index ed968ebf89e06c96cdbb669c1c3a16fa4a2ed823..c16a1317b8c9e59be09f4dda7271ccd9d0941f57 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1023,6 +1023,7 @@ set(SCHED_SRC add_library(SCHED_LIB ${SCHED_SRC}) set(SCHED_NR_SRC + ${OPENAIR1_DIR}/SCHED_NR/fapi_nr_l1.c ${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c ${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_gNB.c ) diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h index 9c5da3876fbf8135b0cf506086d9290d8d223a82..9a14755f43485164447f57665b4318e7906f5154 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h @@ -3,6 +3,17 @@ #include "nfapi_interface.h" +// nFAPI enums +typedef enum { + NFAPI_NR_DL_CONFIG_DCI_DL_PDU_TYPE = 0, + NFAPI_NR_DL_CONFIG_BCH_PDU_TYPE, + NFAPI_NR_DL_CONFIG_DLSCH_PDU_TYPE, + NFAPI_NR_DL_CONFIG_PCH_PDU_TYPE, + NFAPI_NR_DL_CONFIG_NBCH_PDU_TYPE, + NFAPI_NR_DL_CONFIG_NPDCCH_PDU_TYPE, + NFAPI_NR_DL_CONFIG_NDLSCH_PDU_TYPE +} nfapi_nr_dl_config_pdu_type_e; + //These TLVs are used exclusively by nFAPI typedef struct { @@ -307,13 +318,13 @@ typedef struct { uint8_t pdu_type; uint8_t pdu_size; union { - nfapi_nr_dl_config_dci_dl_pdu_rel15_t dci_dl_pdu; - nfapi_nr_dl_config_bch_pdu_rel15_t bch_pdu; - nfapi_nr_dl_config_dlsch_pdu_rel15_t dlsch_pdu; - nfapi_nr_dl_config_pch_pdu_rel15_t pch_pdu; - nfapi_nr_dl_config_nbch_pdu_rel15_t nbch_pdu; - nfapi_nr_dl_config_npdcch_pdu_rel15_t npdcch_pdu; - nfapi_nr_dl_config_ndlsch_pdu_rel15_t ndlsch_pdu; + nfapi_nr_dl_config_dci_dl_pdu_rel15_t dci_dl_pdu_rel15; + nfapi_nr_dl_config_bch_pdu_rel15_t bch_pdu_rel15; + nfapi_nr_dl_config_dlsch_pdu_rel15_t dlsch_pdu_rel15; + nfapi_nr_dl_config_pch_pdu_rel15_t pch_pdu_rel15; + nfapi_nr_dl_config_nbch_pdu_rel15_t nbch_pdu_rel15; + nfapi_nr_dl_config_npdcch_pdu_rel15_t npdcch_pdu_rel15; + nfapi_nr_dl_config_ndlsch_pdu_rel15_t ndlsch_pdu_rel15; }; } nfapi_nr_dl_config_request_pdu_t; diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index d264f6dae308446e125435780585f36dbc3421ae..ee4d9faa8d63cea455d3ee41ab91ea3c890dbde8 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -35,6 +35,7 @@ #include "PHY/NR_REFSIG/defs.h" #include "PHY/LTE_REFSIG/lte_refsig.h" +#include "SCHED_NR/fapi_nr_l1.h" extern uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn); extern int32_t get_uldl_offset(int eutra_bandP); @@ -64,8 +65,8 @@ int l1_north_init_gNB() { LOG_I(PHY,"%s() RC.gNB[%d][%d] installing callbacks\n", __FUNCTION__, i, j); - RC.gNB[i][j]->if_inst->PHY_config_req = nr_phy_config_request; - RC.gNB[i][j]->if_inst->schedule_response = schedule_response; + RC.gNB[i][j]->if_inst->NR_PHY_config_req = nr_phy_config_request; + RC.gNB[i][j]->if_inst->NR_Schedule_response = nr_schedule_response; } } } diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c index ea563c9b114f6fbf69d77b11751eddf5508a92d6..1d567024bbee3102a022ff65f83b7d1d0e052f31 100644 --- a/openair2/LAYER2/NR_MAC_gNB/config.c +++ b/openair2/LAYER2/NR_MAC_gNB/config.c @@ -215,11 +215,11 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP, - LOG_E(MAC, "%s() %s:%d RC.nrmac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.nrmac[Mod_idP]->if_inst->PHY_config_req); + LOG_E(MAC, "%s() %s:%d RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req); // if in nFAPI mode - if ( (nfapi_mode == 1 || nfapi_mode == 2) && (RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) ){ - while(RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) { + if ( (nfapi_mode == 1 || nfapi_mode == 2) && (RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req == NULL) ){ + while(RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req == NULL) { // DJP AssertFatal(RC.nrmac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n"); usleep(100 * 1000); printf("Waiting for PHY_config_req\n"); @@ -232,7 +232,7 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP, phycfg.CC_id = CC_idP; phycfg.cfg = &RC.nrmac[Mod_idP]->config[CC_idP]; - if (RC.nrmac[Mod_idP]->if_inst->PHY_config_req) RC.nrmac[Mod_idP]->if_inst->PHY_config_req(&phycfg); + if (RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req) RC.nrmac[Mod_idP]->if_inst->NR_PHY_config_req(&phycfg); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c index 03f6c08c6c5b440f73186122e660ec5053db613c..398e622b7ff8e2bf1a9e9eccc24eeee2f317373a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c @@ -612,7 +612,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, if((subframeP == 0) && (frameP & 7) == 0){ schedule_nr_mib(module_idP, frameP, subframeP); } - + /* if (phy_test == 0){ // This schedules SI for legacy LTE and eMTC starting in subframeP schedule_SI(module_idP, frameP, subframeP); @@ -637,7 +637,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, schedule_ulsch_phy_test(module_idP,frameP,subframeP); schedule_ue_spec_phy_test(module_idP,frameP,subframeP,mbsfn_status); } - + */ if (RC.flexran[module_idP]->enabled) flexran_agent_send_update_stats(module_idP); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c index 0382e6392575dad27a3e3103f16f26f8fea79578..c51eafbad42534fc1dc2f7fb0dc0e8b0bea62c1e 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c @@ -94,12 +94,12 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subfram dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; memset((void *) dl_config_pdu, 0,sizeof(nfapi_nr_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_BCH_PDU_TYPE; + dl_config_pdu->pdu_type = NFAPI_NR_DL_CONFIG_BCH_PDU_TYPE; dl_config_pdu->pdu_size =2 + sizeof(nfapi_nr_dl_config_bch_pdu_rel15_t); - dl_config_pdu->bch_pdu.tl.tag = NFAPI_NR_DL_CONFIG_REQUEST_BCH_PDU_REL15_TAG; - dl_config_pdu->bch_pdu.length = mib_sdu_length; - dl_config_pdu->bch_pdu.pdu_index = gNB->pdu_index[CC_id]; - dl_config_pdu->bch_pdu.transmission_power = 6000; + dl_config_pdu->bch_pdu_rel15.tl.tag = NFAPI_NR_DL_CONFIG_REQUEST_BCH_PDU_REL15_TAG; + dl_config_pdu->bch_pdu_rel15.length = mib_sdu_length; + dl_config_pdu->bch_pdu_rel15.pdu_index = gNB->pdu_index[CC_id]; + dl_config_pdu->bch_pdu_rel15.transmission_power = 6000; dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG; dl_req->number_pdu++; dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST; diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c index 5c00291214a91d9681f2b2e7d3ef69c58137f39f..ba0d92d8754245d4e3bcc41bcfe1147fee7c0517 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c @@ -1,6 +1,7 @@ #include "openair1/PHY/defs_eNB.h" -#include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" #include "openair1/PHY/phy_extern.h" +#include "openair1/SCHED_NR/fapi_nr_l1.h" +#include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" #include "LAYER2/MAC/mac_extern.h" #include "LAYER2/MAC/mac_proto.h" #include "LAYER2/NR_MAC_gNB/mac_proto.h" @@ -262,8 +263,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) // clear DL/UL info for new scheduling round - clear_nfapi_information(RC.mac[module_id],CC_id, - UL_info->frame,UL_info->subframe); + clear_nfapi_information(RC.nrmac[module_id],CC_id,UL_info->frame,UL_info->subframe); handle_nr_rach(UL_info); @@ -311,16 +311,16 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) dump_dl(sched_info); #endif - if (ifi->schedule_response) + if (ifi->NR_Schedule_response) { - AssertFatal(ifi->schedule_response!=NULL, - "schedule_response is null (mod %d, cc %d)\n", - module_id, - CC_id); - ifi->schedule_response(sched_info); + AssertFatal(ifi->NR_Schedule_response!=NULL, + "nr_schedule_response is null (mod %d, cc %d)\n", + module_id, + CC_id); + ifi->NR_Schedule_response(sched_info); } - LOG_D(PHY,"Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu); + LOG_D(PHY,"NR_Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu); } } } @@ -336,7 +336,7 @@ NR_IF_Module_t *NR_IF_Module_init(int Mod_id){ memset((void*)if_inst[Mod_id],0,sizeof(NR_IF_Module_t)); if_inst[Mod_id]->CC_mask=0; - if_inst[Mod_id]->UL_indication = NR_UL_indication; + if_inst[Mod_id]->NR_UL_indication = NR_UL_indication; AssertFatal(pthread_mutex_init(&if_inst[Mod_id]->if_mutex,NULL)==0, "allocation of if_inst[%d]->if_mutex fails\n",Mod_id); diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_PHY_INTERFACE/NR_IF_Module.h index 664ef8930d04ba7a818c50bfb82eead48fc56896..d3e2f7e59e0fe9059d8c85f087e39eaf38f33036 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.h @@ -100,7 +100,7 @@ typedef struct{ /// subframe sub_frame_t subframe; /// nFAPI DL Config Request - nfapi_dl_config_request_t *DL_req; + nfapi_nr_dl_config_request_t *DL_req; /// nFAPI UL Config Request nfapi_ul_config_request_t *UL_req; /// nFAPI HI_DCI Request @@ -117,9 +117,9 @@ typedef struct { typedef struct NR_IF_Module_s{ //define the function pointer - void (*UL_indication)(NR_UL_IND_t *UL_INFO); - void (*schedule_response)(NR_Sched_Rsp_t *Sched_INFO); - void (*PHY_config_req)(NR_PHY_Config_t* config_INFO); + void (*NR_UL_indication)(NR_UL_IND_t *UL_INFO); + void (*NR_Schedule_response)(NR_Sched_Rsp_t *Sched_INFO); + void (*NR_PHY_config_req)(NR_PHY_Config_t* config_INFO); uint32_t CC_mask; uint16_t current_frame; uint8_t current_subframe; diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c index a419e224615911a4bc8bc915d8b1a2b4169487cc..cd50c02368f1b08235e447e50113c23f623610fa 100644 --- a/targets/RT/USER/nr-gnb.c +++ b/targets/RT/USER/nr-gnb.c @@ -49,6 +49,7 @@ #include "PHY/defs_gNB.h" #include "SCHED/sched_eNB.h" #include "SCHED_NR/sched_nr.h" +#include "SCHED_NR/fapi_nr_l1.h" #include "PHY/LTE_TRANSPORT/transport_proto.h" #undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all @@ -928,8 +929,8 @@ void init_gNB(int single_thread_flag,int wait_for_sync) { LOG_I(PHY,"Registering with MAC interface module\n"); AssertFatal((gNB->if_inst = NR_IF_Module_init(inst))!=NULL,"Cannot register interface"); - gNB->if_inst->schedule_response = schedule_response; - gNB->if_inst->PHY_config_req = nr_phy_config_request; + gNB->if_inst->NR_Schedule_response = nr_schedule_response; + gNB->if_inst->NR_PHY_config_req = nr_phy_config_request; memset((void*)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO)); memset((void*)&gNB->Sched_INFO,0,sizeof(gNB->Sched_INFO)); LOG_I(PHY,"Setting indication lists\n");