improvements in ul_port_config function
This commit is contained in:
@@ -268,18 +268,11 @@ float nr_get_Pcmax(int p_Max,
|
||||
float nr_get_Pcmin(int bandwidth_index);
|
||||
void set_antenna_port_parameters(fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu, int n_cw, long *max_length, long *dmrs, int ant);
|
||||
int get_sum_delta_pucch(NR_UE_MAC_INST_t *mac, int slot, frame_t frame);
|
||||
uint8_t get_table_7_3_1_1_2_12_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_13_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_14_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_15_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_16_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_17_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_18_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_19_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_20_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_21_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_22_value(int ap, int idx);
|
||||
uint8_t get_table_7_3_1_1_2_23_value(int ap, int idx);
|
||||
void ul_ports_config(NR_UE_MAC_INST_t *mac,
|
||||
int *n_front_load_symb,
|
||||
nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||
dci_pdu_rel15_t *dci,
|
||||
nr_dci_format_t dci_format);
|
||||
|
||||
/* Random Access */
|
||||
/* \brief This function schedules the PRACH according to prach_ConfigurationIndex and TS 38.211 tables 6.3.3.2.x
|
||||
|
||||
@@ -122,12 +122,6 @@ const uint8_t table_7_3_1_1_2_12[14][3] = {
|
||||
{2,7,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_12_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 14 && idx < 3, "Invalid inputs for table_7_3_1_1_2_12\n");
|
||||
return table_7_3_1_1_2_12[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_13[10][4] = {
|
||||
{1,0,1,1},
|
||||
{2,0,1,1},
|
||||
@@ -141,24 +135,12 @@ const uint8_t table_7_3_1_1_2_13[10][4] = {
|
||||
{2,2,6,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_13_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 10 && idx < 4, "Invalid inputs for table_7_3_1_1_2_13\n");
|
||||
return table_7_3_1_1_2_13[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_14[3][5] = {
|
||||
{2,0,1,2,1},
|
||||
{2,0,1,4,2},
|
||||
{2,2,3,6,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_14_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 3 && idx < 5, "Invalid inputs for table_7_3_1_1_2_14\n");
|
||||
return table_7_3_1_1_2_14[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_15[4][6] = {
|
||||
{2,0,1,2,3,1},
|
||||
{2,0,1,4,5,2},
|
||||
@@ -166,12 +148,6 @@ const uint8_t table_7_3_1_1_2_15[4][6] = {
|
||||
{2,0,2,4,6,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_15_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 4 && idx < 6, "Invalid inputs for table_7_3_1_1_2_15\n");
|
||||
return table_7_3_1_1_2_15[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_16[12][2] = {
|
||||
{1,0},
|
||||
{1,1},
|
||||
@@ -187,12 +163,6 @@ const uint8_t table_7_3_1_1_2_16[12][2] = {
|
||||
{3,5}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_16_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 12 && idx < 2, "Invalid inputs for table_7_3_1_1_2_16\n");
|
||||
return table_7_3_1_1_2_16[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_17[7][3] = {
|
||||
{1,0,1},
|
||||
{2,0,1},
|
||||
@@ -202,36 +172,17 @@ const uint8_t table_7_3_1_1_2_17[7][3] = {
|
||||
{3,4,5},
|
||||
{2,0,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_17_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 7 && idx < 3, "Invalid inputs for table_7_3_1_1_2_17\n");
|
||||
return table_7_3_1_1_2_17[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_18[3][4] = {
|
||||
{2,0,1,2},
|
||||
{3,0,1,2},
|
||||
{3,3,4,5}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_18_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 3 && idx < 4, "Invalid inputs for table_7_3_1_1_2_18\n");
|
||||
return table_7_3_1_1_2_18[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_19[2][5] = {
|
||||
{2,0,1,2,3},
|
||||
{3,0,1,2,3}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_19_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 2 && idx < 5, "Invalid inputs for table_7_3_1_1_2_19\n");
|
||||
return table_7_3_1_1_2_19[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_20[28][3] = {
|
||||
{1,0,1},
|
||||
{1,1,1},
|
||||
@@ -263,12 +214,6 @@ const uint8_t table_7_3_1_1_2_20[28][3] = {
|
||||
{1,7,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_20_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 28 && idx < 3, "Invalid inputs for table_7_3_1_1_2_20\n");
|
||||
return table_7_3_1_1_2_20[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_21[19][4] = {
|
||||
{1,0,1,1},
|
||||
{2,0,1,1},
|
||||
@@ -291,12 +236,6 @@ const uint8_t table_7_3_1_1_2_21[19][4] = {
|
||||
{2,8,9,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_21_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 19 && idx < 4, "Invalid inputs for table_7_3_1_1_2_21\n");
|
||||
return table_7_3_1_1_2_21[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_22[6][5] = {
|
||||
{2,0,1,2,1},
|
||||
{3,0,1,2,1},
|
||||
@@ -306,12 +245,6 @@ const uint8_t table_7_3_1_1_2_22[6][5] = {
|
||||
{3,4,5,10,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_22_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 6 && idx < 5, "Invalid inputs for table_7_3_1_1_2_22\n");
|
||||
return table_7_3_1_1_2_22[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_1_1_2_23[5][6] = {
|
||||
{2,0,1,2,3,1},
|
||||
{3,0,1,2,3,1},
|
||||
@@ -320,12 +253,6 @@ const uint8_t table_7_3_1_1_2_23[5][6] = {
|
||||
{3,4,5,10,11,2}
|
||||
};
|
||||
|
||||
uint8_t get_table_7_3_1_1_2_23_value(int ap, int idx)
|
||||
{
|
||||
AssertFatal(ap < 5 && idx < 6, "Invalid inputs for table_7_3_1_1_2_23\n");
|
||||
return table_7_3_1_1_2_23[ap][idx];
|
||||
}
|
||||
|
||||
const uint8_t table_7_3_2_3_3_1[12][5] = {
|
||||
{1,1,0,0,0},
|
||||
{1,0,1,0,0},
|
||||
@@ -563,6 +490,146 @@ void set_antenna_port_parameters(fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu,
|
||||
}
|
||||
}
|
||||
|
||||
void ul_ports_config(NR_UE_MAC_INST_t *mac,
|
||||
int *n_front_load_symb,
|
||||
nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||
dci_pdu_rel15_t *dci,
|
||||
nr_dci_format_t dci_format)
|
||||
{
|
||||
uint8_t rank = pusch_config_pdu->nrOfLayers;
|
||||
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP->pusch_Config;
|
||||
AssertFatal(pusch_Config != NULL, "pusch_Config shouldn't be null\n");
|
||||
|
||||
long transformPrecoder = pusch_config_pdu->transform_precoding;
|
||||
LOG_D(NR_MAC,
|
||||
"transformPrecoder %s\n",
|
||||
transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled");
|
||||
|
||||
long *max_length = NULL;
|
||||
long *dmrs_type = NULL;
|
||||
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
|
||||
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
|
||||
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
|
||||
} else {
|
||||
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->maxLength;
|
||||
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->dmrs_Type;
|
||||
}
|
||||
|
||||
int val = dci->antenna_ports.val;
|
||||
LOG_D(NR_MAC,
|
||||
"MappingType%s max_length %s, dmrs_type %s, antenna_ports %d\n",
|
||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA ? "A" : "B",
|
||||
max_length ? "len2" : "len1",
|
||||
dmrs_type ? "type2" : "type1",
|
||||
val);
|
||||
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-6
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 1 << val;
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-7
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 1 << ((val > 3) ? (val - 4) : (val));
|
||||
*n_front_load_symb = (val > 3) ? 2 : 1;
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-8/9/10/11
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? 2 : 1;
|
||||
pusch_config_pdu->dmrs_ports = 1 << ((val > 1) ? (val - 2) : (val));
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? 2 : 1;
|
||||
pusch_config_pdu->dmrs_ports = (val > 1) ? ((val > 2) ? 0x5 : 0xc) : 0x3;
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 0x7; // ports 0-2
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 0xf; // ports 0-3
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-12/13/14/15
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_12[val][0];
|
||||
pusch_config_pdu->dmrs_ports = 1 << table_7_3_1_1_2_12[val][1];
|
||||
*n_front_load_symb = table_7_3_1_1_2_12[val][2];
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_13[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_13[val][1], 2);
|
||||
*n_front_load_symb = table_7_3_1_1_2_13[val][3];
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_14[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_14[val][1], 3);
|
||||
*n_front_load_symb = table_7_3_1_1_2_14[val][4];
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_15[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_15[val][1], 4);
|
||||
*n_front_load_symb = table_7_3_1_1_2_15[val][5];
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type != NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-16/17/18/19
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_16[val][0];
|
||||
pusch_config_pdu->dmrs_ports = 1 << table_7_3_1_1_2_16[val][1];
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_17[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_17[val][1], 2);
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_18[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_18[val][1], 3);
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_19[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_19[val][1], 4);
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type != NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-20/21/22/23
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_20[val][0];
|
||||
pusch_config_pdu->dmrs_ports = 1 << table_7_3_1_1_2_20[val][1];
|
||||
*n_front_load_symb = table_7_3_1_1_2_20[val][2];
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_21[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_21[val][1], 2);
|
||||
*n_front_load_symb = table_7_3_1_1_2_21[val][3];
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_22[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_22[val][1], 3);
|
||||
*n_front_load_symb = table_7_3_1_1_2_22[val][4];
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = table_7_3_1_1_2_23[val][0];
|
||||
pusch_config_pdu->dmrs_ports = packBits(&table_7_3_1_1_2_23[val][1], 4);
|
||||
*n_front_load_symb = table_7_3_1_1_2_23[val][5];
|
||||
}
|
||||
}
|
||||
LOG_D(NR_MAC,
|
||||
"num_dmrs_cdm_grps_no_data %d, dmrs_ports %d\n",
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data,
|
||||
pusch_config_pdu->dmrs_ports);
|
||||
}
|
||||
|
||||
void set_precoding_information_parameters(nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||
int n_antenna_port,
|
||||
long transformPrecoder,
|
||||
|
||||
@@ -314,174 +314,6 @@ void ul_layers_config(NR_UE_MAC_INST_t *mac, nfapi_nr_ue_pusch_pdu_t *pusch_conf
|
||||
}
|
||||
}
|
||||
|
||||
// todo: this function shall be reviewed completely because of the many comments left by the author
|
||||
static void ul_ports_config(NR_UE_MAC_INST_t *mac,
|
||||
int *n_front_load_symb,
|
||||
nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||
dci_pdu_rel15_t *dci,
|
||||
nr_dci_format_t dci_format)
|
||||
{
|
||||
uint8_t rank = pusch_config_pdu->nrOfLayers;
|
||||
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP->pusch_Config;
|
||||
AssertFatal(pusch_Config != NULL, "pusch_Config shouldn't be null\n");
|
||||
|
||||
long transformPrecoder = pusch_config_pdu->transform_precoding;
|
||||
LOG_D(NR_MAC,
|
||||
"transformPrecoder %s\n",
|
||||
transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled");
|
||||
|
||||
long *max_length = NULL;
|
||||
long *dmrs_type = NULL;
|
||||
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
|
||||
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
|
||||
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
|
||||
} else {
|
||||
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->maxLength;
|
||||
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->dmrs_Type;
|
||||
}
|
||||
|
||||
int val = dci->antenna_ports.val;
|
||||
LOG_D(NR_MAC,
|
||||
"MappingType%s max_length %s, dmrs_type %s, antenna_ports %d\n",
|
||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA ? "A" : "B",
|
||||
max_length ? "len2" : "len1",
|
||||
dmrs_type ? "type2" : "type1",
|
||||
val);
|
||||
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-6
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 1 << val;
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-7
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 1 << ((val > 3) ? (val - 4) : (val));
|
||||
*n_front_load_symb = (val > 3) ? 2 : 1;
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-8/9/10/11
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? 2 : 1;
|
||||
pusch_config_pdu->dmrs_ports = 1 << ((val > 1) ? (val - 2) : (val));
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? 2 : 1;
|
||||
pusch_config_pdu->dmrs_ports = (val > 1) ? ((val > 2) ? 0x5 : 0xc) : 0x3;
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 0x7; // ports 0-2
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||
pusch_config_pdu->dmrs_ports = 0xf; // ports 0-3
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type == NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-12/13/14/15
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? 2 : 1; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 1 << ((val > 1) ? (val > 5 ? (val - 6) : (val - 2)) : val);
|
||||
*n_front_load_symb = (val > 6) ? 2 : 1;
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? 2 : 1; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_13_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_13_value(val, 2);
|
||||
//n_front_load_symb = (val > 3) ? 2 : 1; // FIXME
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_14_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_14_value(val, 2);
|
||||
//pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_14_value(val, 3);
|
||||
//n_front_load_symb = (val > 1) ? 2 : 1; //FIXME
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_15_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_15_value(val, 2);
|
||||
//pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_15_value(val, 3);
|
||||
//pusch_config_pdu->dmrs_ports[3] = get_table_7_3_1_1_2_15_value(val, 4);
|
||||
//n_front_load_symb = (val > 1) ? 2 : 1; //FIXME
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type != NULL)
|
||||
&& (max_length == NULL)) { // tables 7.3.1.1.2-16/17/18/19
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? ((val > 5) ? 3 : 2) : 1; //TBC
|
||||
pusch_config_pdu->dmrs_ports = (val > 1) ? (val > 5 ? (val - 6) : (val - 2)) : val; //TBC
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? ((val > 2) ? 3 : 2) : 1; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_17_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_18_value(val, 2);
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? 3 : 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_18_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_18_value(val, 2);
|
||||
//pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_18_value(val, 3);
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = val + 2; //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = 0;
|
||||
//pusch_config_pdu->dmrs_ports[1] = 1;
|
||||
//pusch_config_pdu->dmrs_ports[2] = 2;
|
||||
//pusch_config_pdu->dmrs_ports[3] = 3;
|
||||
}
|
||||
}
|
||||
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
|
||||
&& (dmrs_type != NULL)
|
||||
&& (max_length != NULL)) { // tables 7.3.1.1.2-20/21/22/23
|
||||
if (rank == 1) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_20_value(val, 0); //TBC
|
||||
pusch_config_pdu->dmrs_ports = get_table_7_3_1_1_2_20_value(val, 1); //TBC
|
||||
//n_front_load_symb = get_table_7_3_1_1_2_20_value(val, 2); //FIXME
|
||||
}
|
||||
if (rank == 2) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_21_value(val, 0); //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_21_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_21_value(val, 2);
|
||||
//n_front_load_symb = get_table_7_3_1_1_2_21_value(val, 3); //FIXME
|
||||
}
|
||||
if (rank == 3) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_22_value(val, 0); //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_22_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_22_value(val, 2);
|
||||
//pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_22_value(val, 3);
|
||||
//n_front_load_symb = get_table_7_3_1_1_2_22_value(val, 4); //FIXME
|
||||
}
|
||||
if (rank == 4) {
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_23_value(val, 0); //TBC
|
||||
pusch_config_pdu->dmrs_ports = 0; //FIXME
|
||||
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_23_value(val, 1);
|
||||
//pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_23_value(val, 2);
|
||||
//pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_23_value(val, 3);
|
||||
//pusch_config_pdu->dmrs_ports[3] = get_table_7_3_1_1_2_23_value(val, 4);
|
||||
//n_front_load_symb = get_table_7_3_1_1_2_23_value(val, 5); //FIXME
|
||||
}
|
||||
}
|
||||
LOG_D(NR_MAC,
|
||||
"num_dmrs_cdm_grps_no_data %d, dmrs_ports %d\n",
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data,
|
||||
pusch_config_pdu->dmrs_ports);
|
||||
}
|
||||
|
||||
// Configuration of Msg3 PDU according to clauses:
|
||||
// - 8.3 of 3GPP TS 38.213 version 16.3.0 Release 16
|
||||
// - 6.1.2.2 of TS 38.214
|
||||
|
||||
Reference in New Issue
Block a user