Commit 31cc296c authored by liuxu's avatar liuxu

add pbch and simplify sever_manager.py231120

parent 9c43e061
This diff is collapsed.
......@@ -211,7 +211,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
memcpy(&sim_socket_manager.vrb_map_csi_report_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_sr_report_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_srs_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_prach_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
sim_socket_manager.CC_id = CC_id;
sim_socket_manager.slot = slot;
......@@ -294,7 +294,8 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
NR_SCHED_UNLOCK(&gNB->sched_lock);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT);
if (sim_socket_manager.measurement_flag || sim_socket_manager.prach_sched_flag || sim_socket_manager.dl_sched_flag ||sim_socket_manager.ul_sched_flag){
if (sim_socket_manager.measurement_flag || sim_socket_manager.random_access_sched_flag || \
sim_socket_manager.dl_sched_flag ||sim_socket_manager.ul_sched_flag || sim_socket_manager.pbch_sched_flag){
pthread_mutex_lock(&sim_mutex_socket);
message_flag = 2;
// gnbSendToManager_buf = &sim_socket_manager;
......@@ -302,14 +303,16 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
sim_socket_manager.message = 2;
// gnbSendToManager_len = sim_socket_manager.data_len;
LOG_D(NR_MAC,"data_len %d\n", sim_socket_manager.data_len);
LOG_D(NR_MAC,"[%d.%d] measurement_flag %x prach_sched_flag %x dl_sched_flag %x ul_sched_flag %x msg1 %d.%d msg2 %d.%d msg3 %d.%d msg4 %d.%d pdcch %d.%d pdsch %d.%d "
"csirs %d.%d ulsch %d.%d acknack %d.%d csi_report %d.%d sr %d.%d srs %d.%d\n",
sim_socket_manager.frame, sim_socket_manager.slot,
sim_socket_manager.measurement_flag, sim_socket_manager.prach_sched_flag,sim_socket_manager.dl_sched_flag, sim_socket_manager.ul_sched_flag,
LOG_I(NR_MAC,"[%d.%d] measurement_flag %x pbch_sched_flag %x random_access_sched_flag %x dl_sched_flag %x ul_sched_flag %x "
"ssb %d.%d sib1 %d.%d msg1 %d.%d msg2 %d.%d msg3 %d.%d msg4 %d.%d pdcch %d.%d pdsch %d.%d "
"csirs %d.%d prach %d.%d ulsch %d.%d acknack %d.%d csi_report %d.%d sr %d.%d srs %d.%d\n",
sim_socket_manager.frame, sim_socket_manager.slot,sim_socket_manager.measurement_flag, sim_socket_manager.pbch_sched_flag,
sim_socket_manager.random_access_sched_flag,sim_socket_manager.dl_sched_flag, sim_socket_manager.ul_sched_flag,
sim_socket_manager.ssb_frame, sim_socket_manager.ssb_slot, sim_socket_manager.sib1_frame, sim_socket_manager.sib1_slot,
sim_socket_manager.msg1_frame, sim_socket_manager.msg1_slot,sim_socket_manager.msg2_frame, sim_socket_manager.msg2_slot,
sim_socket_manager.msg3_frame, sim_socket_manager.msg3_slot, sim_socket_manager.msg4_frame, sim_socket_manager.msg4_slot,
sim_socket_manager.pdcch_frame, sim_socket_manager.pdcch_slot, sim_socket_manager.pdsch_frame, sim_socket_manager.pdsch_slot,
sim_socket_manager.csirs_frame, sim_socket_manager.csirs_slot,
sim_socket_manager.csirs_frame, sim_socket_manager.csirs_slot,sim_socket_manager.prach_frame, sim_socket_manager.prach_slot,
sim_socket_manager.ulsch_frame, sim_socket_manager.ulsch_slot, sim_socket_manager.acknack_frame, sim_socket_manager.acknack_slot,
sim_socket_manager.csi_report_frame, sim_socket_manager.csi_report_slot, sim_socket_manager.sr_frame, sim_socket_manager.sr_slot,
sim_socket_manager.srs_frame, sim_socket_manager.srs_slot);
......
......@@ -341,9 +341,9 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
prach_pdu->num_cs = get_NCS(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.zeroCorrelationZoneConfig,
format0,
scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->restrictedSetConfig);
sim_socket_manager.msg1_frame = frameP;
sim_socket_manager.msg1_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x01;
sim_socket_manager.prach_frame = frameP;
sim_socket_manager.prach_slot = slotP;
sim_socket_manager.ul_sched_flag |= 0x20;
LOG_D(NR_MAC, "Frame %d, Slot %d: Prach Occasion id = %u fdm index = %u start symbol = %u slot index = %u subframe index = %u \n",
frameP, slotP,
prach_occasion_id, prach_pdu->num_ra,
......@@ -420,7 +420,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
for (int i = 0; i < N_RA_RB * fdm; ++i){
uint16_t slbitmap = SL_to_bitmap(start_symbol, N_t_slot*N_dur);
vrb_map_UL[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
sim_socket_manager.vrb_map_msg1_socket[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
sim_socket_manager.vrb_map_prach_socket[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
......@@ -1118,7 +1118,7 @@ static void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_f
uint16_t *vrb_map_UL = &RC.nrmac[module_idP]->common_channels[CC_id].vrb_map_UL[buffer_index * MAX_BWP_SIZE];
sim_socket_manager.msg3_frame = ra->Msg3_frame;
sim_socket_manager.msg3_slot = ra->Msg3_slot;
sim_socket_manager.prach_sched_flag |= 0x04;
sim_socket_manager.random_access_sched_flag |= 0x04;
for (int i = 0; i < ra->msg3_nb_rb; ++i) {
AssertFatal(!(vrb_map_UL[i + ra->msg3_first_rb + ra->msg3_bwp_start] & mask),
"RB %d in %4d.%2d is already taken, cannot allocate Msg3!\n",
......@@ -1445,10 +1445,10 @@ static void nr_generate_Msg2(module_id_t module_idP,
TX_req->Slot = slotP;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager.pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x08;
sim_socket_manager.msg2_frame = frameP;
sim_socket_manager.msg2_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x02;
sim_socket_manager.random_access_sched_flag |= 0x02;
// Mark the corresponding symbols RBs as used
fill_pdcch_vrb_map(nr_mac,
CC_id,
......@@ -1912,10 +1912,10 @@ static void nr_generate_Msg4(module_id_t module_idP,
LOG_I(PHY, "Msg4 send %d.%d\n", frameP, slotP);
sim_socket_manager.msg4_frame = frameP;
sim_socket_manager.msg4_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x08;
sim_socket_manager.random_access_sched_flag |= 0x08;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager.pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x10;
// Mark the corresponding symbols and RBs as used
fill_pdcch_vrb_map(nr_mac,
......
......@@ -49,6 +49,7 @@
#include "common/ran_context.h"
#include "executables/softmodem-common.h"
#include "slotmap.h"
extern RAN_CONTEXT_t RC;
......@@ -89,8 +90,10 @@ static void schedule_ssb(frame_t frame,
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].pm_idx = 0;
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = beam_index;
dl_req->nPDUs++;
LOG_D(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
sim_socket_manager.ssb_frame = frame;
sim_socket_manager.ssb_slot = slot;
sim_socket_manager.pbch_sched_flag |= 0x01;
LOG_I(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
}
static void fill_ssb_vrb_map(NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id)
......@@ -101,8 +104,24 @@ static void fill_ssb_vrb_map(NR_COMMON_channels_t *cc, int rbStart, int ssb_subc
uint16_t *vrb_map = cc[CC_id].vrb_map;
const int extra_prb = ssb_subcarrier_offset > 0;
for (int rb = 0; rb < 20 + extra_prb; rb++)
vrb_map[rbStart + rb] = SL_to_bitmap(symStart % NR_SYMBOLS_PER_SLOT, 4);
for (int rb = 0; rb < 20 + extra_prb; rb++){
uint16_t slbitmap = SL_to_bitmap(symStart % NR_SYMBOLS_PER_SLOT, 4);
vrb_map[rbStart + rb] = slbitmap;
sim_socket_manager.vrb_map_ssb_socket[rbStart + rb] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",rbStart + rb, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
if (symbol&1){
printf("1 ");
}
else{
printf("0 ");
}
// printf("%d ",sim_socket_manager.vrb_map_ul_socket[(rb + sched_ctrl->sched_pusch.rbStart)*SYMBOL_PER_SLOT_MAP_SOCKET+symbol]);
}
printf("\n");
#endif
}
}
void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP, nfapi_nr_dl_tti_request_t *DL_req)
......@@ -373,7 +392,22 @@ static uint32_t schedule_control_sib1(module_id_t module_id,
gNB_mac->sched_ctrlCommon->cce_index,
gNB_mac->sched_ctrlCommon->aggregation_level);
for (int rb = 0; rb < pdsch->rbSize; rb++) {
vrb_map[rb + rbStart] |= SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
uint16_t slbitmap = SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
vrb_map[rb + rbStart] |= slbitmap;
sim_socket_manager.vrb_map_sib1_socket[rbStart + rb] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",rbStart + rb, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
if (symbol&1){
printf("1 ");
}
else{
printf("0 ");
}
// printf("%d ",sim_socket_manager.vrb_map_ul_socket[(rb + sched_ctrl->sched_pusch.rbStart)*SYMBOL_PER_SLOT_MAP_SOCKET+symbol]);
}
printf("\n");
#endif
}
return TBS;
}
......@@ -558,7 +592,13 @@ void schedule_nr_sib1(module_id_t module_idP,
(slotP == type0_PDCCH_CSS_config->n_0) &&
(type0_PDCCH_CSS_config->num_rbs > 0) &&
(type0_PDCCH_CSS_config->active == true)) {
sim_socket_manager.sib1_frame = frameP;
sim_socket_manager.sib1_slot = slotP;
sim_socket_manager.pbch_sched_flag |= 0x02;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager. pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x80;
LOG_D(NR_MAC,"(%d.%d) SIB1 transmission: ssb_index %d\n", frameP, slotP, type0_PDCCH_CSS_config->ssb_index);
// Get SIB1
......
......@@ -279,19 +279,22 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
if ((sched_ctrl->ul_failure && !get_softmodem_params()->phy_test) || sched_ctrl->rrc_processing_timer > 0) {
continue;
}
LOG_D(NR_MAC," %d.%d pass2 \n", frame, slot);
NR_SRS_Config_t *srs_config = current_BWP->srs_Config;
if (!srs_config)
continue;
LOG_D(NR_MAC," %d.%d pass3 \n", frame, slot);
for(int rs = 0; rs < srs_config->srs_ResourceSetToAddModList->list.count; rs++) {
// Find periodic resource set
NR_SRS_ResourceSet_t *srs_resource_set = srs_config->srs_ResourceSetToAddModList->list.array[rs];
if (srs_resource_set->resourceType.present != NR_SRS_ResourceSet__resourceType_PR_periodic) {
LOG_D(NR_MAC," %d.%d pass5 rs %d srs_resource_set->resourceType.present %d \n", frame, slot,rs, srs_resource_set->resourceType.present);
continue;
}
LOG_D(NR_MAC," %d.%d pass4 \n", frame, slot);
// Find the corresponding srs resource
NR_SRS_Resource_t *srs_resource = NULL;
for (int r1 = 0; r1 < srs_resource_set->srs_ResourceIdList->list.count; r1++) {
......@@ -309,6 +312,7 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
if (srs_resource == NULL) {
continue;
}
LOG_D(NR_MAC," %d.%d pass5 \n", frame, slot);
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = get_ul_tdalist(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
const int num_tda = tdaList->list.count;
......@@ -326,7 +330,7 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
const uint16_t period = srs_period[srs_resource->resourceType.choice.periodic->periodicityAndOffset_p.present];
const uint16_t offset = get_nr_srs_offset(srs_resource->resourceType.choice.periodic->periodicityAndOffset_p);
LOG_D(NR_MAC," %d.%d pass1 Scheduling SRS reception for %d.%d\n", frame, slot, sched_frame, sched_slot);
// Check if UE will transmit the SRS in this frame
if ((sched_frame * n_slots_frame + sched_slot - offset) % period == 0) {
LOG_I(NR_MAC," %d.%d Scheduling SRS reception for %d.%d\n", frame, slot, sched_frame, sched_slot);
......
......@@ -1775,7 +1775,7 @@ static void pf_ul(module_id_t module_id,
sched_ctrl->cce_index = CCEIndex;
sim_socket_manager.pdcch_frame = frame;
sim_socket_manager.pdcch_slot = slot;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x20;
fill_pdcch_vrb_map(nrmac,
CC_id,
&sched_ctrl->sched_pdcch,
......@@ -1937,7 +1937,7 @@ static void pf_ul(module_id_t module_id,
sched_ctrl->cce_index = CCEIndex;
sim_socket_manager.pdcch_frame = frame;
sim_socket_manager.pdcch_slot = slot;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x20;
fill_pdcch_vrb_map(nrmac,
CC_id,
&sched_ctrl->sched_pdcch,
......
......@@ -12,7 +12,7 @@
#define MAX_UE_NUMBER_MAP_SOCKET 1
// #define VRB_MAP_TEST_MANAGER
#define VRB_MAP_TEST_MANAGER
typedef struct {
uint16_t data_len;
......@@ -21,13 +21,20 @@ typedef struct {
uint16_t frame;
uint16_t slot;
uint16_t measurement_flag;
/*LSB -> MSB : masg1 || masg2 || masg3 || masg4*/
uint16_t prach_sched_flag;
/*LSB -> MSB : pdcch || pdsch || csirs*/
/*LSB -> MSB : ssb || sib1*/
uint16_t pbch_sched_flag;
/*LSB -> MSB : msg1 || msg2 || msg3 || msg4*/
uint16_t random_access_sched_flag;
/*LSB -> MSB : pdcch_to_pdsch || pdsch || csirs || pdcch_to_msg2 || pdcch_to_msg4 || pdcch_to_pusch || pdcch_to_sib1*/
uint16_t dl_sched_flag;
/*LSB -> MSB : ulsch || acknack || csi-report || sr || srs*/
/*LSB -> MSB : ulsch || acknack || csi-report || sr || srs || prach */
uint16_t ul_sched_flag;
uint16_t ssb_frame;
uint16_t ssb_slot;
uint16_t sib1_frame;
uint16_t sib1_slot;
uint16_t msg1_frame;
uint16_t msg1_slot;
uint16_t msg2_frame;
......@@ -44,16 +51,18 @@ typedef struct {
uint16_t csirs_frame;
uint16_t csirs_slot;
uint16_t csi_report_frame;
uint16_t sr_frame;
uint16_t srs_frame;
uint16_t acknack_frame;
uint16_t prach_frame;
uint16_t prach_slot;
uint16_t ulsch_frame;
uint16_t ulsch_slot;
uint16_t acknack_frame;
uint16_t acknack_slot;
uint16_t csi_report_frame;
uint16_t csi_report_slot;
uint16_t sr_frame;
uint16_t sr_slot;
uint16_t srs_frame;
uint16_t srs_slot;
uint16_t acknack_slot;
uint16_t ulsch_slot;
uint16_t dl_recv_bytes_high16;
uint16_t dl_recv_bytes_low16;
......@@ -67,6 +76,8 @@ typedef struct {
int16_t pusch_snr;
int16_t rsrp;
uint16_t vrb_map_ssb_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_sib1_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg1_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg2_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg3_socket[RB_TOTAL_MAP_SOCKET];
......@@ -74,11 +85,13 @@ typedef struct {
uint16_t vrb_map_pdcch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_pdsch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_csirs_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_prach_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_pusch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_acknack_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_csi_report_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_sr_report_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_srs_socket[RB_TOTAL_MAP_SOCKET];
}sim_socket_t;
extern sim_socket_t sim_socket_manager;
......
......@@ -551,6 +551,7 @@ static void config_srs(const NR_ServingCellConfigCommon_t *scc,
NR_SRS_Resource_t *srs_res0=calloc(1,sizeof(*srs_res0));
srs_res0->srs_ResourceId = res_id;
srs_res0->nrofSRS_Ports = NR_SRS_Resource__nrofSRS_Ports_port1;
LOG_I(NR_RRC, "do_srs %d\n", do_srs);
if (do_srs) {
long nrofSRS_Ports = 1;
if (uecap &&
......@@ -2126,7 +2127,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
// We are using do_srs = 0 here because the periodic SRS will only be enabled in update_cellGroupConfig() if do_srs == 1
initialUplinkBWP->srs_Config = calloc(1, sizeof(*initialUplinkBWP->srs_Config));
config_srs(scc, initialUplinkBWP->srs_Config, NULL, curr_bwp, uid, 0, maxMIMO_Layers, 0);
config_srs(scc, initialUplinkBWP->srs_Config, NULL, curr_bwp, uid, 0, maxMIMO_Layers, 0);//configuration->do_SRS
scheduling_request_config(scc, pucch_Config, scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing);
......
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