mac: harmonize csi_payload_t struct
1. Reuse csi_payload_t struct to hold CSI report payload on PUSCH and PUCCH PDU. 2. Move the struct to fapi header file
This commit is contained in:
committed by
francescomani
parent
d1febb5fc2
commit
cecfec82a8
@@ -772,13 +772,13 @@ static rate_match_info_uci_t calc_rate_match_info_uci(const nfapi_nr_ue_pusch_pd
|
||||
const double beta_csi1 = get_beta_offset_csi(pusch_pdu->pusch_uci.beta_offset_csi1);
|
||||
|
||||
// get the number of coded CSI part 1 symbols and bits, TS 38.212 section 6.3.2.4.1.2
|
||||
const uint16_t ocsi1 = pusch_pdu->pusch_uci.csi_part1_bit_length;
|
||||
const uint16_t ocsi1 = pusch_pdu->pusch_uci.csi_payload.p1_bits;
|
||||
rminfo.Q_dash_CSI1 = get_Qd(ocsi1, beta_csi1, alpha, sumKr, s1, s1, rminfo.Q_dash_ACK);
|
||||
rminfo.E_uci_CSI1 = rminfo.Q_dash_CSI1 * nlqm;
|
||||
|
||||
// get the number of coded CSI part 2 symbols and bits, TS 38.212 section 6.3.2.4.1.3
|
||||
const double beta_csi2 = get_beta_offset_csi(pusch_pdu->pusch_uci.beta_offset_csi2);
|
||||
const uint16_t ocsi2 = pusch_pdu->pusch_uci.csi_part2_bit_length;
|
||||
const uint16_t ocsi2 = pusch_pdu->pusch_uci.csi_payload.p2_bits;
|
||||
rminfo.Q_dash_CSI2 = get_Qd(ocsi2, beta_csi2, alpha, sumKr, s1, s1, rminfo.Q_dash_ACK + rminfo.Q_dash_CSI1);
|
||||
rminfo.E_uci_CSI2 = rminfo.Q_dash_CSI2 * nlqm;
|
||||
|
||||
@@ -1253,7 +1253,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
return;
|
||||
}
|
||||
|
||||
bool uci_present = (pusch_pdu->pusch_uci.harq_ack_bit_length != 0) || (pusch_pdu->pusch_uci.csi_part1_bit_length != 0);
|
||||
bool uci_present = (pusch_pdu->pusch_uci.harq_ack_bit_length != 0) || (pusch_pdu->pusch_uci.csi_payload.p1_bits != 0);
|
||||
if (uci_present) {
|
||||
rm_info = calc_rate_match_info_uci(pusch_pdu, harq_process_ul_ue, nl_qm, &G[pusch_id]);
|
||||
}
|
||||
@@ -1301,9 +1301,9 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
|
||||
uint64_t b_csi1[16] = {0}; // limit to 1024-bit encoded length
|
||||
uint64_t b_csi2[16] = {0}; // limit to 1024-bit encoded length
|
||||
if (pusch_pdu->pusch_uci.csi_part1_bit_length != 0) {
|
||||
nr_uci_encoding(pusch_pdu->pusch_uci.csi_part1_payload,
|
||||
pusch_pdu->pusch_uci.csi_part1_bit_length,
|
||||
if (pusch_pdu->pusch_uci.csi_payload.p1_bits != 0) {
|
||||
nr_uci_encoding(pusch_pdu->pusch_uci.csi_payload.part1_payload,
|
||||
pusch_pdu->pusch_uci.csi_payload.p1_bits,
|
||||
pucch_pdu->prb_size,
|
||||
true,
|
||||
rm_info.E_uci_CSI1,
|
||||
@@ -1313,9 +1313,9 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
uci_present |= true;
|
||||
|
||||
// Process CSI Part 2 if any
|
||||
if (pusch_pdu->pusch_uci.csi_part2_bit_length > 0)
|
||||
nr_uci_encoding(pusch_pdu->pusch_uci.csi_part2_payload,
|
||||
pusch_pdu->pusch_uci.csi_part2_bit_length,
|
||||
if (pusch_pdu->pusch_uci.csi_payload.p2_bits > 0)
|
||||
nr_uci_encoding(pusch_pdu->pusch_uci.csi_payload.part2_payload,
|
||||
pusch_pdu->pusch_uci.csi_payload.p2_bits,
|
||||
pucch_pdu->prb_size,
|
||||
true,
|
||||
rm_info.E_uci_CSI2,
|
||||
@@ -1376,7 +1376,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
/////////////////////////ULSCH scrambling/////////////////////////
|
||||
|
||||
uint32_t available_bits;
|
||||
bool is_uci_on_pusch = (pusch_pdu->pusch_uci.harq_ack_bit_length != 0 || pusch_pdu->pusch_uci.csi_part1_bit_length != 0);
|
||||
bool is_uci_on_pusch = (pusch_pdu->pusch_uci.harq_ack_bit_length != 0 || pusch_pdu->pusch_uci.csi_payload.p1_bits != 0);
|
||||
|
||||
if (is_uci_on_pusch) {
|
||||
// UCI on PUSCH is present, so available bits are the total codeword length
|
||||
|
||||
@@ -257,15 +257,15 @@ static void prepare_ue_pusch_pdu_from_matlab_vector(const bool uci_on_pusch,
|
||||
p_vec_bits += var.A;
|
||||
copy_bytes_to_packed_bits(p_vec_bits, var.oack, false, pb);
|
||||
|
||||
pusch_config_pdu->pusch_uci.csi_part1_bit_length = var.ocsi1;
|
||||
pb = (uint8_t *)&pusch_config_pdu->pusch_uci.csi_part1_payload;
|
||||
memset(pb, 0, sizeof(pusch_config_pdu->pusch_uci.csi_part1_payload));
|
||||
pusch_config_pdu->pusch_uci.csi_payload.p1_bits = var.ocsi1;
|
||||
pb = (uint8_t *)&pusch_config_pdu->pusch_uci.csi_payload.part1_payload;
|
||||
memset(pb, 0, sizeof(pusch_config_pdu->pusch_uci.csi_payload.part1_payload));
|
||||
p_vec_bits += var.oack;
|
||||
copy_bytes_to_packed_bits(p_vec_bits, var.ocsi1, false, pb);
|
||||
|
||||
pusch_config_pdu->pusch_uci.csi_part2_bit_length = var.ocsi2;
|
||||
pb = (uint8_t *)&pusch_config_pdu->pusch_uci.csi_part2_payload;
|
||||
memset(pb, 0, sizeof(pusch_config_pdu->pusch_uci.csi_part2_payload));
|
||||
pusch_config_pdu->pusch_uci.csi_payload.p2_bits = var.ocsi2;
|
||||
pb = (uint8_t *)&pusch_config_pdu->pusch_uci.csi_payload.part2_payload;
|
||||
memset(pb, 0, sizeof(pusch_config_pdu->pusch_uci.csi_payload.part2_payload));
|
||||
p_vec_bits += var.ocsi1;
|
||||
copy_bytes_to_packed_bits(p_vec_bits, var.ocsi2, false, pb);
|
||||
}
|
||||
@@ -1342,16 +1342,14 @@ int main(int argc, char *argv[])
|
||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = num_dmrs_cdm_grps_no_data;
|
||||
}
|
||||
if (uci_on_pusch) {
|
||||
const nfapi_nr_ue_pusch_uci_t pusch_uci = {.alpha_scaling = 3,
|
||||
.beta_offset_csi1 = 13,
|
||||
.beta_offset_csi2 = 13,
|
||||
.beta_offset_harq_ack = 11,
|
||||
.harq_ack_bit_length = 3,
|
||||
.harq_payload = 3,
|
||||
.csi_part1_bit_length = 4,
|
||||
.csi_part1_payload = 15,
|
||||
.csi_part2_bit_length = 4,
|
||||
.csi_part2_payload = 15};
|
||||
const nfapi_nr_ue_pusch_uci_t pusch_uci = {
|
||||
.alpha_scaling = 3,
|
||||
.beta_offset_csi1 = 13,
|
||||
.beta_offset_csi2 = 13,
|
||||
.beta_offset_harq_ack = 11,
|
||||
.harq_ack_bit_length = 3,
|
||||
.harq_payload = 3,
|
||||
.csi_payload = {.p1_bits = 4, .part1_payload = 15, .p2_bits = 4, .part2_payload = 15}};
|
||||
pusch_config_pdu->pusch_uci = pusch_uci;
|
||||
prepare_ue_pusch_pdu_from_matlab_vector(uci_on_pusch, uci_ulsch_matlab_vec, pusch_config_pdu, cw_buf);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user