Don't send subframe process tick to RRC, to X2AP directly if necessary
This commit is contained in:
@@ -31,7 +31,6 @@ rx_func_implem[rx_func]
|
|||||||
--> handle_nr_ulsch
|
--> handle_nr_ulsch
|
||||||
subgraph gNB_dlsch_ulsch_scheduler
|
subgraph gNB_dlsch_ulsch_scheduler
|
||||||
run_pdcp
|
run_pdcp
|
||||||
--> nr_rrc_trigger
|
|
||||||
--> schedule_xxxx
|
--> schedule_xxxx
|
||||||
end
|
end
|
||||||
handle_nr_ulsch --> gNB_dlsch_ulsch_scheduler
|
handle_nr_ulsch --> gNB_dlsch_ulsch_scheduler
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||||
#include "UTIL/OPT/opt.h"
|
#include "UTIL/OPT/opt.h"
|
||||||
|
|
||||||
#include "RRC/NR/nr_rrc_extern.h"
|
#include "openair2/X2AP/x2ap_eNB.h"
|
||||||
|
|
||||||
#include "nr_pdcp/nr_pdcp_oai_api.h"
|
#include "nr_pdcp/nr_pdcp_oai_api.h"
|
||||||
|
|
||||||
@@ -174,7 +174,8 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
|
|||||||
void nr_pdcp_tick(int frame, int subframe);
|
void nr_pdcp_tick(int frame, int subframe);
|
||||||
nr_rlc_tick(frame, slot >> *scc->ssbSubcarrierSpacing);
|
nr_rlc_tick(frame, slot >> *scc->ssbSubcarrierSpacing);
|
||||||
nr_pdcp_tick(frame, slot >> *scc->ssbSubcarrierSpacing);
|
nr_pdcp_tick(frame, slot >> *scc->ssbSubcarrierSpacing);
|
||||||
nr_rrc_trigger(&ctxt, 0 /*CC_id*/, frame, slot >> *scc->ssbSubcarrierSpacing);
|
if (is_x2ap_enabled())
|
||||||
|
x2ap_trigger(); /* if none of the above options, it must be NSA */
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||||
|
|||||||
@@ -111,9 +111,6 @@ rrc_gNB_generate_RRCRelease(
|
|||||||
\param void *args_p Pointer on arguments to start the task. */
|
\param void *args_p Pointer on arguments to start the task. */
|
||||||
void *rrc_gnb_task(void *args_p);
|
void *rrc_gnb_task(void *args_p);
|
||||||
|
|
||||||
/* Trigger RRC periodic processing. To be called once per ms. */
|
|
||||||
void nr_rrc_trigger(protocol_ctxt_t *ctxt, int CC_id, int frame, int subframe);
|
|
||||||
|
|
||||||
/**\ Function to set or overwrite PTRS DL RRC parameters.
|
/**\ Function to set or overwrite PTRS DL RRC parameters.
|
||||||
\ *bwp Pointer to dedicated RC config structure
|
\ *bwp Pointer to dedicated RC config structure
|
||||||
\ *ptrsNrb Pointer to K_ptrs N_RB related parameters
|
\ *ptrsNrb Pointer to K_ptrs N_RB related parameters
|
||||||
|
|||||||
@@ -2794,17 +2794,6 @@ static int get_dl_mimo_layers(const gNB_RRC_INST *rrc, const NR_UE_NR_Capability
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
|
||||||
|
|
||||||
MessageDef *msg;
|
|
||||||
|
|
||||||
/* send a tick to x2ap */
|
|
||||||
if (is_x2ap_enabled()){
|
|
||||||
msg = itti_alloc_new_message(TASK_RRC_ENB, 0, X2AP_SUBFRAME_PROCESS);
|
|
||||||
itti_send_msg_to_task(TASK_X2AP, ctxt_pP->module_id, msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int rrc_gNB_process_e1_setup_req(e1ap_setup_req_t *req, instance_t instance) {
|
int rrc_gNB_process_e1_setup_req(e1ap_setup_req_t *req, instance_t instance) {
|
||||||
|
|
||||||
AssertFatal(req->supported_plmns <= PLMN_LIST_MAX_SIZE, "Supported PLMNs is more than PLMN_LIST_MAX_SIZE\n");
|
AssertFatal(req->supported_plmns <= PLMN_LIST_MAX_SIZE, "Supported PLMNs is more than PLMN_LIST_MAX_SIZE\n");
|
||||||
@@ -2993,10 +2982,6 @@ void *rrc_gnb_task(void *args_p) {
|
|||||||
write_rrc_stats(RC.nrrrc[0]);
|
write_rrc_stats(RC.nrrrc[0]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RRC_SUBFRAME_PROCESS:
|
|
||||||
nr_rrc_subframe_process(&RRC_SUBFRAME_PROCESS(msg_p).ctxt, RRC_SUBFRAME_PROCESS(msg_p).CC_id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F1AP_INITIAL_UL_RRC_MESSAGE:
|
case F1AP_INITIAL_UL_RRC_MESSAGE:
|
||||||
AssertFatal(NODE_IS_CU(RC.nrrrc[instance]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[instance]->node_type),
|
AssertFatal(NODE_IS_CU(RC.nrrrc[instance]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[instance]->node_type),
|
||||||
"should not receive F1AP_INITIAL_UL_RRC_MESSAGE, need call by CU!\n");
|
"should not receive F1AP_INITIAL_UL_RRC_MESSAGE, need call by CU!\n");
|
||||||
@@ -3363,14 +3348,3 @@ int rrc_gNB_generate_pcch_msg(uint32_t tmsi, uint8_t paging_drx, instance_t inst
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rrc_trigger(protocol_ctxt_t *ctxt, int CC_id, int frame, int subframe)
|
|
||||||
{
|
|
||||||
MessageDef *message_p;
|
|
||||||
message_p = itti_alloc_new_message(TASK_RRC_GNB, 0, RRC_SUBFRAME_PROCESS);
|
|
||||||
RRC_SUBFRAME_PROCESS(message_p).ctxt = *ctxt;
|
|
||||||
RRC_SUBFRAME_PROCESS(message_p).CC_id = CC_id;
|
|
||||||
LOG_D(NR_RRC, "Time in RRC: %u/ %u \n", frame, subframe);
|
|
||||||
itti_send_msg_to_task(TASK_RRC_GNB, ctxt->module_id, message_p);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -767,3 +767,9 @@ mutex_error:
|
|||||||
LOG_E(X2AP, "mutex error\n");
|
LOG_E(X2AP, "mutex error\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void x2ap_trigger(void)
|
||||||
|
{
|
||||||
|
MessageDef *msg = itti_alloc_new_message(TASK_X2AP, 0, X2AP_SUBFRAME_PROCESS);
|
||||||
|
itti_send_msg_to_task(TASK_X2AP, 0, msg);
|
||||||
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ int x2ap_eNB_init_sctp (x2ap_eNB_instance_t *instance_p,
|
|||||||
void *x2ap_task(void *arg);
|
void *x2ap_task(void *arg);
|
||||||
|
|
||||||
int is_x2ap_enabled(void);
|
int is_x2ap_enabled(void);
|
||||||
|
void x2ap_trigger(void);
|
||||||
|
|
||||||
#endif /* X2AP_H_ */
|
#endif /* X2AP_H_ */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user