Send CSI-RS measurements from PHY to MAC at UE
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
|
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
|
||||||
#define FAPI_NR_DCI_IND 0x04
|
#define FAPI_NR_DCI_IND 0x04
|
||||||
#define FAPI_NR_RX_PDU_TYPE_RAR 0x05
|
#define FAPI_NR_RX_PDU_TYPE_RAR 0x05
|
||||||
|
#define FAPI_NR_CSIRS_IND 0x06
|
||||||
|
|
||||||
#define FAPI_NR_SIBS_MASK_SIB1 0x1
|
#define FAPI_NR_SIBS_MASK_SIB1 0x1
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t uci_format;
|
uint8_t uci_format;
|
||||||
uint8_t uci_channel;
|
uint8_t uci_channel;
|
||||||
@@ -50,7 +47,12 @@ typedef struct {
|
|||||||
uint32_t sr;
|
uint32_t sr;
|
||||||
} fapi_nr_uci_pdu_rel15_t;
|
} fapi_nr_uci_pdu_rel15_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t *rank_indicator;
|
||||||
|
uint8_t *i1;
|
||||||
|
uint8_t *i2;
|
||||||
|
uint8_t *cqi;
|
||||||
|
} fapi_nr_csirs_measurements_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/// frequency_domain_resource;
|
/// frequency_domain_resource;
|
||||||
@@ -130,6 +132,7 @@ typedef struct {
|
|||||||
fapi_nr_pdsch_pdu_t pdsch_pdu;
|
fapi_nr_pdsch_pdu_t pdsch_pdu;
|
||||||
fapi_nr_ssb_pdu_t ssb_pdu;
|
fapi_nr_ssb_pdu_t ssb_pdu;
|
||||||
fapi_nr_sib_pdu_t sib_pdu;
|
fapi_nr_sib_pdu_t sib_pdu;
|
||||||
|
fapi_nr_csirs_measurements_t csirs_measurements;
|
||||||
};
|
};
|
||||||
} fapi_nr_rx_indication_body_t;
|
} fapi_nr_rx_indication_body_t;
|
||||||
|
|
||||||
|
|||||||
@@ -676,5 +676,22 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
|||||||
*ue->nr_csi_rs_info->precoded_sinr_dB,
|
*ue->nr_csi_rs_info->precoded_sinr_dB,
|
||||||
*ue->nr_csi_rs_info->cqi);
|
*ue->nr_csi_rs_info->cqi);
|
||||||
|
|
||||||
|
// Send CSI measurements to MAC
|
||||||
|
fapi_nr_csirs_measurements_t csirs_measurements;
|
||||||
|
csirs_measurements.rank_indicator = ue->nr_csi_rs_info->rank_indicator;
|
||||||
|
csirs_measurements.i1 = ue->nr_csi_rs_info->i1;
|
||||||
|
csirs_measurements.i2 = ue->nr_csi_rs_info->i2;
|
||||||
|
csirs_measurements.cqi = ue->nr_csi_rs_info->cqi;
|
||||||
|
nr_downlink_indication_t *dl_indication = calloc(sizeof(*dl_indication),1);
|
||||||
|
fapi_nr_rx_indication_t *rx_ind = calloc(sizeof(*rx_ind),1);
|
||||||
|
nr_fill_dl_indication(dl_indication, NULL, rx_ind, proc, ue, gNB_id);
|
||||||
|
nr_fill_rx_indication(rx_ind, FAPI_NR_CSIRS_IND, gNB_id, ue, NULL, NULL, 1, proc, (void *)&csirs_measurements);
|
||||||
|
if (ue->if_inst && ue->if_inst->dl_indication) {
|
||||||
|
ue->if_inst->dl_indication(dl_indication, NULL);
|
||||||
|
} else {
|
||||||
|
free(dl_indication);
|
||||||
|
free(rx_ind);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -402,7 +402,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
|||||||
NR_UE_DLSCH_t *dlsch1,
|
NR_UE_DLSCH_t *dlsch1,
|
||||||
uint16_t n_pdus,
|
uint16_t n_pdus,
|
||||||
UE_nr_rxtx_proc_t *proc,
|
UE_nr_rxtx_proc_t *proc,
|
||||||
void * typeSpecific);
|
void *typeSpecific);
|
||||||
|
|
||||||
bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
||||||
UE_nr_rxtx_proc_t *proc,
|
UE_nr_rxtx_proc_t *proc,
|
||||||
|
|||||||
@@ -118,9 +118,8 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
|||||||
NR_UE_DLSCH_t *dlsch0,
|
NR_UE_DLSCH_t *dlsch0,
|
||||||
NR_UE_DLSCH_t *dlsch1,
|
NR_UE_DLSCH_t *dlsch1,
|
||||||
uint16_t n_pdus,
|
uint16_t n_pdus,
|
||||||
UE_nr_rxtx_proc_t *proc,
|
UE_nr_rxtx_proc_t *proc,
|
||||||
void * typeSpecific){
|
void *typeSpecific){
|
||||||
|
|
||||||
|
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||||
|
|
||||||
@@ -174,6 +173,11 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
|||||||
rx_ind->rx_indication_body[n_pdus - 1].ssb_pdu.ssb_start_subcarrier = frame_parms->ssb_start_subcarrier;
|
rx_ind->rx_indication_body[n_pdus - 1].ssb_pdu.ssb_start_subcarrier = frame_parms->ssb_start_subcarrier;
|
||||||
rx_ind->rx_indication_body[n_pdus - 1].ssb_pdu.rsrp_dBm = ue->measurements.rsrp_dBm[gNB_id];
|
rx_ind->rx_indication_body[n_pdus - 1].ssb_pdu.rsrp_dBm = ue->measurements.rsrp_dBm[gNB_id];
|
||||||
break;
|
break;
|
||||||
|
case FAPI_NR_CSIRS_IND:
|
||||||
|
memcpy(&rx_ind->rx_indication_body[n_pdus - 1].csirs_measurements,
|
||||||
|
(fapi_nr_csirs_measurements_t*)typeSpecific,
|
||||||
|
sizeof(*(fapi_nr_csirs_measurements_t*)typeSpecific));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,4 +37,4 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
|||||||
NR_UE_DLSCH_t *dlsch1,
|
NR_UE_DLSCH_t *dlsch1,
|
||||||
uint16_t n_pdus,
|
uint16_t n_pdus,
|
||||||
UE_nr_rxtx_proc_t *proc,
|
UE_nr_rxtx_proc_t *proc,
|
||||||
void * typeSpecific ) {}
|
void *typeSpecific ) {}
|
||||||
|
|||||||
@@ -399,6 +399,9 @@ typedef struct {
|
|||||||
/// measured SSB RSRP in dBm
|
/// measured SSB RSRP in dBm
|
||||||
short ssb_rsrp_dBm;
|
short ssb_rsrp_dBm;
|
||||||
|
|
||||||
|
/// measurements from CSI-RS
|
||||||
|
fapi_nr_csirs_measurements_t csirs_measurements;
|
||||||
|
|
||||||
/// Last NDI of UL HARQ processes
|
/// Last NDI of UL HARQ processes
|
||||||
uint8_t UL_ndi[NR_MAX_HARQ_PROCESSES];
|
uint8_t UL_ndi[NR_MAX_HARQ_PROCESSES];
|
||||||
/// first ULTX of UL HARQ processes
|
/// first ULTX of UL HARQ processes
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ int nr_get_sf_retxBSRTimer(uint8_t retxBSR_Timer);
|
|||||||
|
|
||||||
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, fapi_nr_dci_indication_pdu_t *dci_ind);
|
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, fapi_nr_dci_indication_pdu_t *dci_ind);
|
||||||
int nr_ue_process_dci_indication_pdu(module_id_t module_id, int cc_id, int gNB_index, frame_t frame, int slot, fapi_nr_dci_indication_pdu_t *dci);
|
int nr_ue_process_dci_indication_pdu(module_id_t module_id, int cc_id, int gNB_index, frame_t frame, int slot, fapi_nr_dci_indication_pdu_t *dci);
|
||||||
|
int8_t nr_ue_process_csirs_measurements(module_id_t module_id, frame_t frame, int slot, fapi_nr_csirs_measurements_t *csirs_measurements);
|
||||||
|
|
||||||
uint32_t get_ssb_frame(uint32_t test);
|
uint32_t get_ssb_frame(uint32_t test);
|
||||||
|
|
||||||
|
|||||||
@@ -1371,6 +1371,16 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8_t nr_ue_process_csirs_measurements(module_id_t module_id,
|
||||||
|
frame_t frame,
|
||||||
|
int slot,
|
||||||
|
fapi_nr_csirs_measurements_t *csirs_measurements) {
|
||||||
|
LOG_D(NR_MAC,"(%d.%d) Received CSI-RS measurements\n", frame, slot);
|
||||||
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
|
memcpy(&mac->csirs_measurements, csirs_measurements, sizeof(*csirs_measurements));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void set_harq_status(NR_UE_MAC_INST_t *mac,
|
void set_harq_status(NR_UE_MAC_INST_t *mac,
|
||||||
uint8_t pucch_id,
|
uint8_t pucch_id,
|
||||||
uint8_t harq_id,
|
uint8_t harq_id,
|
||||||
|
|||||||
@@ -1112,6 +1112,10 @@ int8_t handle_dlsch(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8_t handle_csirs_measurements(module_id_t module_id, frame_t frame, int slot, fapi_nr_csirs_measurements_t *csirs_measurements) {
|
||||||
|
return nr_ue_process_csirs_measurements(module_id, frame, slot, csirs_measurements);
|
||||||
|
}
|
||||||
|
|
||||||
void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nack) {
|
void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nack) {
|
||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||||
@@ -1236,7 +1240,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
|
|||||||
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.ssb_length,
|
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.ssb_length,
|
||||||
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.ssb_start_subcarrier,
|
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.ssb_start_subcarrier,
|
||||||
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.cell_id)) << FAPI_NR_RX_PDU_TYPE_SSB;
|
(dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.cell_id)) << FAPI_NR_RX_PDU_TYPE_SSB;
|
||||||
free((dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.pdu);
|
free((dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.pdu);
|
||||||
break;
|
break;
|
||||||
case FAPI_NR_RX_PDU_TYPE_SIB:
|
case FAPI_NR_RX_PDU_TYPE_SIB:
|
||||||
ret_mask |= (handle_bcch_dlsch(dl_info->module_id,
|
ret_mask |= (handle_bcch_dlsch(dl_info->module_id,
|
||||||
@@ -1251,6 +1255,12 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
|
|||||||
case FAPI_NR_RX_PDU_TYPE_RAR:
|
case FAPI_NR_RX_PDU_TYPE_RAR:
|
||||||
ret_mask |= (handle_dlsch(dl_info, ul_time_alignment, i)) << FAPI_NR_RX_PDU_TYPE_RAR;
|
ret_mask |= (handle_dlsch(dl_info, ul_time_alignment, i)) << FAPI_NR_RX_PDU_TYPE_RAR;
|
||||||
break;
|
break;
|
||||||
|
case FAPI_NR_CSIRS_IND:
|
||||||
|
ret_mask |= (handle_csirs_measurements(dl_info->module_id,
|
||||||
|
dl_info->frame,
|
||||||
|
dl_info->slot,
|
||||||
|
&(dl_info->rx_ind->rx_indication_body+i)->csirs_measurements)) << FAPI_NR_CSIRS_IND;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user