formatting

This commit is contained in:
francescomani
2025-03-03 17:00:26 +01:00
parent 06e66330ab
commit a04e7af63e
2 changed files with 100 additions and 93 deletions
+5 -5
View File
@@ -726,12 +726,12 @@ int get_slot_idx_in_period(const int slot, const frame_structure_t *fs)
int get_dmrs_port(int nl, uint16_t dmrs_ports) int get_dmrs_port(int nl, uint16_t dmrs_ports)
{ {
if (dmrs_ports == 0)
if (dmrs_ports == 0) return 0; // dci 1_0 return 0; // dci 1_0
int p = -1; int p = -1;
int found = -1; int found = -1;
for (int i=0; i<12; i++) { // loop over dmrs ports for (int i = 0; i < 12; i++) { // loop over dmrs ports
if((dmrs_ports>>i)&0x01) { // check if current bit is 1 if((dmrs_ports >> i) & 0x01) { // check if current bit is 1
found++; found++;
if (found == nl) { // found antenna port number corresponding to current layer if (found == nl) { // found antenna port number corresponding to current layer
p = i; p = i;
@@ -739,7 +739,7 @@ int get_dmrs_port(int nl, uint16_t dmrs_ports)
} }
} }
} }
AssertFatal(p>-1,"No dmrs port corresponding to layer %d found\n",nl); AssertFatal(p > -1, "No dmrs port corresponding to layer %d found\n", nl);
return p; return p;
} }
+95 -88
View File
@@ -315,123 +315,127 @@ 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 // todo: this function shall be reviewed completely because of the many comments left by the author
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) 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; uint8_t rank = pusch_config_pdu->nrOfLayers;
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP->pusch_Config; NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP->pusch_Config;
AssertFatal(pusch_Config!=NULL,"pusch_Config shouldn't be null\n"); AssertFatal(pusch_Config != NULL, "pusch_Config shouldn't be null\n");
long transformPrecoder = pusch_config_pdu->transform_precoding; long transformPrecoder = pusch_config_pdu->transform_precoding;
LOG_D(NR_MAC,"transformPrecoder %s\n", transformPrecoder==NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled"); LOG_D(NR_MAC,
"transformPrecoder %s\n",
transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled");
long *max_length = NULL; long *max_length = NULL;
long *dmrs_type = NULL; long *dmrs_type = NULL;
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) { if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength; max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type; dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
} } else {
else {
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->maxLength; max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->maxLength;
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->dmrs_Type; dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->dmrs_Type;
} }
LOG_D(NR_MAC,"MappingType%s max_length %s, dmrs_type %s, antenna_ports %d\n", int val = dci->antenna_ports.val;
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA?"A":"B",max_length?"len2":"len1",dmrs_type?"type2":"type1",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) && if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
(dmrs_type == NULL) && (max_length == NULL)) { // tables 7.3.1.1.2-6 && (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->num_dmrs_cdm_grps_no_data = 2;
pusch_config_pdu->dmrs_ports = 1 << dci->antenna_ports.val; pusch_config_pdu->dmrs_ports = 1 << val;
} }
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled)
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_enabled) && && (dmrs_type == NULL)
(dmrs_type == NULL) && (max_length != NULL)) { // tables 7.3.1.1.2-7 && (max_length != NULL)) { // tables 7.3.1.1.2-7
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
pusch_config_pdu->dmrs_ports = 1<<((dci->antenna_ports.val > 3)?(dci->antenna_ports.val-4):(dci->antenna_ports.val)); pusch_config_pdu->dmrs_ports = 1 << ((val > 3) ? (val - 4) : (val));
*n_front_load_symb = (dci->antenna_ports.val > 3)?2:1; *n_front_load_symb = (val > 3) ? 2 : 1;
} }
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled) && (dmrs_type == NULL) && (dmrs_type == NULL)
&& (max_length == NULL)) { // tables 7.3.1.1.2-8/9/10/11 && (max_length == NULL)) { // tables 7.3.1.1.2-8/9/10/11
if (rank == 1) { if (rank == 1) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 1)?2:1; pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? 2 : 1;
pusch_config_pdu->dmrs_ports =1<<((dci->antenna_ports.val > 1)?(dci->antenna_ports.val-2):(dci->antenna_ports.val)); pusch_config_pdu->dmrs_ports = 1 << ((val > 1) ? (val - 2) : (val));
} }
if (rank == 2) {
if (rank == 2){ pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 0) ? 2 : 1;
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 0)?2:1; pusch_config_pdu->dmrs_ports = (val > 1) ? ((val > 2) ? 0x5 : 0xc) : 0x3;
pusch_config_pdu->dmrs_ports = (dci->antenna_ports.val > 1)?((dci->antenna_ports.val> 2)?0x5:0xc):0x3;
} }
if (rank == 3) {
if (rank == 3){
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
pusch_config_pdu->dmrs_ports = 0x7; // ports 0-2 pusch_config_pdu->dmrs_ports = 0x7; // ports 0-2
} }
if (rank == 4) {
if (rank == 4){
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
pusch_config_pdu->dmrs_ports = 0xf; // ports 0-3 pusch_config_pdu->dmrs_ports = 0xf; // ports 0-3
} }
} }
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled) if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
&& (dmrs_type == NULL) && (dmrs_type == NULL)
&& (max_length != NULL)) { // tables 7.3.1.1.2-12/13/14/15 && (max_length != NULL)) { // tables 7.3.1.1.2-12/13/14/15
if (rank == 1){ if (rank == 1) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 1)?2:1; //TBC pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? 2 : 1; //TBC
pusch_config_pdu->dmrs_ports = 1<<((dci->antenna_ports.val > 1)?(dci->antenna_ports.val > 5 ?(dci->antenna_ports.val-6):(dci->antenna_ports.val-2)):dci->antenna_ports.val); pusch_config_pdu->dmrs_ports = 1 << ((val > 1) ? (val > 5 ? (val - 6) : (val - 2)) : val);
*n_front_load_symb = (dci->antenna_ports.val > 6)?2:1; *n_front_load_symb = (val > 6) ? 2 : 1;
} }
if (rank == 2){ if (rank == 2) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 0)?2:1; //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_13_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_13_value(val, 2);
//n_front_load_symb = (dci->antenna_ports.val > 3)?2:1; // FIXME //n_front_load_symb = (val > 3) ? 2 : 1; // FIXME
} }
if (rank == 3){ if (rank == 3) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
pusch_config_pdu->dmrs_ports = 0; //FIXME pusch_config_pdu->dmrs_ports = 0; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_14_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_14_value(val, 3);
//n_front_load_symb = (dci->antenna_ports.val > 1)?2:1; //FIXME //n_front_load_symb = (val > 1) ? 2 : 1; //FIXME
} }
if (rank == 4){ if (rank == 4) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; //TBC
pusch_config_pdu->dmrs_ports = 0; //FIXME pusch_config_pdu->dmrs_ports = 0; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_15_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //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(dci->antenna_ports.val, 4); //pusch_config_pdu->dmrs_ports[3] = get_table_7_3_1_1_2_15_value(val, 4);
//n_front_load_symb = (dci->antenna_ports.val > 1)?2:1; //FIXME //n_front_load_symb = (val > 1) ? 2 : 1; //FIXME
} }
} }
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled) if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
&& (dmrs_type != NULL) && (dmrs_type != NULL)
&& (max_length == NULL)) { // tables 7.3.1.1.2-16/17/18/19 && (max_length == NULL)) { // tables 7.3.1.1.2-16/17/18/19
if (rank == 1){ if (rank == 1) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 1)?((dci->antenna_ports.val > 5)?3:2):1; //TBC pusch_config_pdu->num_dmrs_cdm_grps_no_data = (val > 1) ? ((val > 5) ? 3 : 2) : 1; //TBC
pusch_config_pdu->dmrs_ports = (dci->antenna_ports.val > 1)?(dci->antenna_ports.val > 5 ?(dci->antenna_ports.val-6):(dci->antenna_ports.val-2)):dci->antenna_ports.val; //TBC pusch_config_pdu->dmrs_ports = (val > 1) ? (val > 5 ? (val - 6) : (val - 2)) : val; //TBC
} }
if (rank == 2){ if (rank == 2) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 0)?((dci->antenna_ports.val > 2)?3:2):1; //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_17_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //pusch_config_pdu->dmrs_ports[1] = get_table_7_3_1_1_2_18_value(val, 2);
} }
if (rank == 3){ if (rank == 3) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = (dci->antenna_ports.val > 0)?3:2; //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_18_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //pusch_config_pdu->dmrs_ports[2] = get_table_7_3_1_1_2_18_value(val, 3);
} }
if (rank == 4){ if (rank == 4) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = dci->antenna_ports.val + 2; //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = 0; //pusch_config_pdu->dmrs_ports[0] = 0;
//pusch_config_pdu->dmrs_ports[1] = 1; //pusch_config_pdu->dmrs_ports[1] = 1;
@@ -442,37 +446,40 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled) if ((transformPrecoder == NR_PUSCH_Config__transformPrecoder_disabled)
&& (dmrs_type != NULL) && (dmrs_type != NULL)
&& (max_length != NULL)) { // tables 7.3.1.1.2-20/21/22/23 && (max_length != NULL)) { // tables 7.3.1.1.2-20/21/22/23
if (rank == 1){ if (rank == 1) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_20_value(dci->antenna_ports.val, 0); //TBC 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(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //FIXME //n_front_load_symb = get_table_7_3_1_1_2_20_value(val, 2); //FIXME
} }
if (rank == 2){ if (rank == 2) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_21_value(dci->antenna_ports.val, 0); //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_21_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //FIXME //n_front_load_symb = get_table_7_3_1_1_2_21_value(val, 3); //FIXME
} }
if (rank == 3){ if (rank == 3) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_22_value(dci->antenna_ports.val, 0); //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_22_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //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(dci->antenna_ports.val, 4); //FIXME //n_front_load_symb = get_table_7_3_1_1_2_22_value(val, 4); //FIXME
} }
if (rank == 4){ if (rank == 4) {
pusch_config_pdu->num_dmrs_cdm_grps_no_data = get_table_7_3_1_1_2_23_value(dci->antenna_ports.val, 0); //TBC 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; //FIXME
//pusch_config_pdu->dmrs_ports[0] = get_table_7_3_1_1_2_23_value(dci->antenna_ports.val, 1); //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(dci->antenna_ports.val, 2); //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(dci->antenna_ports.val, 3); //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(dci->antenna_ports.val, 4); //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(dci->antenna_ports.val, 5); //FIXME //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); 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: // Configuration of Msg3 PDU according to clauses: