Commit 90f67400 authored by masayuki.harada's avatar masayuki.harada Committed by Haruki NAOI

Fix: RRCConnectionSetup fails in bw 10Mhz.

(cherry picked from commit bea66ef41df2b1e2b04877090b92c7740f9070c1)
parent 9b62b5a2
...@@ -633,6 +633,7 @@ generate_Msg4(module_id_t module_idP, ...@@ -633,6 +633,7 @@ generate_Msg4(module_id_t module_idP,
uint16_t msg4_header = 0; uint16_t msg4_header = 0;
int UE_id = -1; int UE_id = -1;
int first_rb = 0; int first_rb = 0;
int nb_rb = 0;
int N_RB_DL = 0; int N_RB_DL = 0;
int N_RBG; int N_RBG;
uint8_t lcid = 0; uint8_t lcid = 0;
...@@ -1037,10 +1038,11 @@ generate_Msg4(module_id_t module_idP, ...@@ -1037,10 +1038,11 @@ generate_Msg4(module_id_t module_idP,
module_idP, CC_idP, frameP, subframeP, ra->rnti); module_idP, CC_idP, frameP, subframeP, ra->rnti);
/// Choose first 4 RBs for Msg4, should really check that these are free! /// Choose first 4 RBs for Msg4, should really check that these are free!
first_rb = 0; first_rb = 0;
vrb_map[first_rb] = 1; nb_rb = 4;
vrb_map[first_rb + 1] = 1; if(cc[CC_idP].mib->message.dl_Bandwidth == 3) nb_rb=6;
vrb_map[first_rb + 2] = 1; for(int i=0;i<nb_rb;i++){
vrb_map[first_rb + 3] = 1; vrb_map[first_rb+i] = 1;
}
if((cc[CC_idP].mib->message.dl_Bandwidth == 2) || (cc[CC_idP].mib->message.dl_Bandwidth == 3)) if((cc[CC_idP].mib->message.dl_Bandwidth == 2) || (cc[CC_idP].mib->message.dl_Bandwidth == 3))
{ {
rbg_map[0] = 1; rbg_map[0] = 1;
...@@ -1063,32 +1065,24 @@ generate_Msg4(module_id_t module_idP, ...@@ -1063,32 +1065,24 @@ generate_Msg4(module_id_t module_idP,
// Compute MCS/TBS for 4 PRB (coded on 4 vrb) // Compute MCS/TBS for 4 PRB (coded on 4 vrb)
msg4_header = 1 + 6 + 1; // CR header, CR CE, SDU header msg4_header = 1 + 6 + 1; // CR header, CR CE, SDU header
if ((rrc_sdu_length + msg4_header) <= 28) {
ra->msg4_mcs = 3; ra->msg4_mcs = 3;
ra->msg4_TBsize = 28; while(1){
} else if ((rrc_sdu_length + msg4_header) <= 32) { if(get_TBS_DL(ra->msg4_mcs,nb_rb)>(rrc_sdu_length + msg4_header)){
ra->msg4_mcs = 4; ra->msg4_TBsize=get_TBS_DL(ra->msg4_mcs,nb_rb);
ra->msg4_TBsize = 32; break;
} else if ((rrc_sdu_length + msg4_header) <= 41) { }
ra->msg4_mcs = 5; ra->msg4_mcs++;
ra->msg4_TBsize = 41;
} else if ((rrc_sdu_length + msg4_header) <= 49) {
ra->msg4_mcs = 6;
ra->msg4_TBsize = 49;
} else if ((rrc_sdu_length + msg4_header) <= 59) {
ra->msg4_mcs = 7;
ra->msg4_TBsize = 59;
} else if ((rrc_sdu_length + msg4_header) <= 67) {
ra->msg4_mcs = 8;
ra->msg4_TBsize = 67;
} }
LOG_I(MAC,"Frame %d, subframe %d: MSG4 rnti %d, rrc_sdu_length %d, mcs %d, TBsize %d\n",
frameP, subframeP, ra->rnti, rrc_sdu_length,
ra->msg4_mcs, ra->msg4_TBsize);
fill_nfapi_dl_dci_1(dl_config_pdu, 4, // aggregation_level fill_nfapi_dl_dci_1(dl_config_pdu, 4, // aggregation_level
ra->rnti, // rnti ra->rnti, // rnti
1, // rnti_type, CRNTI 1, // rnti_type, CRNTI
ra->harq_pid, // harq_process ra->harq_pid, // harq_process
1, // tpc, none 1, // tpc, none
allocate_prbs_sub(4, N_RB_DL, N_RBG, rbg_map), // resource_block_coding allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, rbg_map), // resource_block_coding
ra->msg4_mcs, // mcs ra->msg4_mcs, // mcs
1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid][TB1], 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid][TB1],
0, // rv 0, // rv
...@@ -1163,7 +1157,7 @@ generate_Msg4(module_id_t module_idP, ...@@ -1163,7 +1157,7 @@ generate_Msg4(module_id_t module_idP,
// DLSCH Config // DLSCH Config
fill_nfapi_dlsch_config(mac, dl_req_body, ra->msg4_TBsize, mac->pdu_index[CC_idP], ra->rnti, 0, // resource_allocation_type : format 1A/1B/1D fill_nfapi_dlsch_config(mac, dl_req_body, ra->msg4_TBsize, mac->pdu_index[CC_idP], ra->rnti, 0, // resource_allocation_type : format 1A/1B/1D
0, // virtual_resource_block_assignment_flag : localized 0, // virtual_resource_block_assignment_flag : localized
allocate_prbs_sub(4, N_RB_DL, N_RBG, rbg_map), // resource_block_coding allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, rbg_map), // resource_block_coding
2, // modulation: QPSK 2, // modulation: QPSK
0, // redundancy version 0, // redundancy version
1, // transport_blocks 1, // transport_blocks
...@@ -1255,6 +1249,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, ...@@ -1255,6 +1249,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
uint8_t rbg_map[25]; uint8_t rbg_map[25];
uint8_t rbg; uint8_t rbg;
int first_rb; int first_rb;
int nb_rb;
int N_RB_DL; int N_RB_DL;
int N_RBG; int N_RBG;
nfapi_dl_config_request_pdu_t *dl_config_pdu; nfapi_dl_config_request_pdu_t *dl_config_pdu;
...@@ -1337,10 +1332,11 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, ...@@ -1337,10 +1332,11 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
// we have to schedule a retransmission // we have to schedule a retransmission
dl_req->sfn_sf = frameP<<4 | subframeP; dl_req->sfn_sf = frameP<<4 | subframeP;
first_rb = 0; first_rb = 0;
vrb_map[first_rb] = 1; nb_rb=4;
vrb_map[first_rb + 1] = 1; if(cc[CC_idP].mib->message.dl_Bandwidth == 3) nb_rb=6;
vrb_map[first_rb + 2] = 1; for(int i=0;i<nb_rb;i++){
vrb_map[first_rb + 3] = 1; vrb_map[first_rb+i] = 1;
}
rbg_map[0] = 1; rbg_map[0] = 1;
rbg_map[1] = 1; rbg_map[1] = 1;
for(rbg = 2; rbg < N_RBG; rbg++) for(rbg = 2; rbg < N_RBG; rbg++)
...@@ -1352,7 +1348,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, ...@@ -1352,7 +1348,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
1, // rnti_type, CRNTI 1, // rnti_type, CRNTI
ra->harq_pid, // harq_process ra->harq_pid, // harq_process
1, // tpc, none 1, // tpc, none
allocate_prbs_sub(4, N_RB_DL, N_RBG, rbg_map), // resource_block_coding allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, rbg_map), // resource_block_coding
ra->msg4_mcs, // mcs ra->msg4_mcs, // mcs
UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid][TB1], UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid][TB1],
round & 3, // rv round & 3, // rv
...@@ -1376,7 +1372,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, ...@@ -1376,7 +1372,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
/* retransmission, no pdu_index */ /* retransmission, no pdu_index */
, ra->rnti, 0, // resource_allocation_type : format 1A/1B/1D , ra->rnti, 0, // resource_allocation_type : format 1A/1B/1D
0, // virtual_resource_block_assignment_flag : localized 0, // virtual_resource_block_assignment_flag : localized
allocate_prbs_sub(4, N_RB_DL, N_RBG, rbg_map), // resource_block_coding : RIV, 4 PRB allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, rbg_map), // resource_block_coding : RIV, 4 PRB
2, // modulation: QPSK 2, // modulation: QPSK
round & 3, // redundancy version round & 3, // redundancy version
1, // transport_blocks 1, // transport_blocks
......
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