RLC data ind: change API to handle multiple TB, but use only one
This commit is contained in:
@@ -3971,7 +3971,8 @@ static void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_
|
||||
|
||||
if (mac_len > 0) {
|
||||
LOG_DDUMP(NR_MAC, (void *)pduP, mac_subheader_len + mac_len, LOG_DUMP_CHAR, "DL_SCH_LCID_CCCH (e.g. RRCSetup) payload: ");
|
||||
nr_mac_rlc_data_ind(mac->ue_id, mac->ue_id, false, rx_lcid, (char *)(pduP + mac_subheader_len), mac_len);
|
||||
nr_rlc_data_ind_t ind = {.ch = rx_lcid, .buf = pduP + mac_subheader_len, .len = mac_len};
|
||||
nr_mac_rlc_data_ind(mac->ue_id, mac->ue_id, false, &ind, 1);
|
||||
}
|
||||
break;
|
||||
case DL_SCH_LCID_TCI_STATE_ACT_UE_SPEC_PDSCH:
|
||||
@@ -4091,7 +4092,8 @@ static void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_
|
||||
break;
|
||||
}
|
||||
LOG_D(NR_MAC, "%4d.%2d : DLSCH -> LCID %d %d bytes\n", frameP, slot, rx_lcid, mac_len);
|
||||
nr_mac_rlc_data_ind(mac->ue_id, mac->ue_id, false, rx_lcid, (char *)(pduP + mac_subheader_len), mac_len);
|
||||
nr_rlc_data_ind_t ind = {.ch = rx_lcid, .buf = pduP + mac_subheader_len, .len = mac_len};
|
||||
nr_mac_rlc_data_ind(mac->ue_id, mac->ue_id, false, &ind, 1);
|
||||
break;
|
||||
default:
|
||||
LOG_W(MAC, "unknown lcid %02x\n", rx_lcid);
|
||||
|
||||
@@ -456,7 +456,8 @@ static int nr_process_mac_pdu(instance_t module_idP,
|
||||
}
|
||||
|
||||
if (prepare_initial_ul_rrc_message(RC.nrmac[module_idP], UE)) {
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, 0, (char *)(pduP + mac_subheader_len), mac_len);
|
||||
nr_rlc_data_ind_t ind = {.ch = 0, .buf = pduP + mac_subheader_len, .len = mac_len};
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, &ind, 1);
|
||||
} else {
|
||||
LOG_E(NR_MAC, "prepare_initial_ul_rrc_message() returned false, cannot forward CCCH message\n");
|
||||
}
|
||||
@@ -475,7 +476,8 @@ static int nr_process_mac_pdu(instance_t module_idP,
|
||||
if (!srbc || srbc->suspended) {
|
||||
LOG_I(NR_MAC, "RNTI %04x LCID %d: ignoring %d bytes\n", UE->rnti, lcid, mac_len);
|
||||
} else {
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, lcid, (char *)(pduP + mac_subheader_len), mac_len);
|
||||
nr_rlc_data_ind_t ind = {.ch = lcid, .buf = pduP + mac_subheader_len, .len = mac_len};
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, &ind, 1);
|
||||
|
||||
UE->mac_stats.ul.total_sdu_bytes += mac_len;
|
||||
UE->mac_stats.ul.lc_bytes[lcid] += mac_len;
|
||||
@@ -499,7 +501,8 @@ static int nr_process_mac_pdu(instance_t module_idP,
|
||||
} else {
|
||||
UE->mac_stats.ul.lc_bytes[lcid] += mac_len;
|
||||
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, lcid, (char *)(pduP + mac_subheader_len), mac_len);
|
||||
nr_rlc_data_ind_t ind = {.ch = lcid, .buf = pduP + mac_subheader_len, .len = mac_len};
|
||||
nr_mac_rlc_data_ind(module_idP, UE->rnti, true, &ind, 1);
|
||||
|
||||
sdus += 1;
|
||||
/* Updated estimated buffer when receiving data */
|
||||
|
||||
@@ -163,12 +163,12 @@ void nr_rlc_release_entity(int ue_id, logical_chan_id_t channel_id)
|
||||
void nr_mac_rlc_data_ind(const module_id_t module_idP,
|
||||
const uint16_t ue_id,
|
||||
const bool gnb_flagP,
|
||||
const logical_chan_id_t channel_idP,
|
||||
char *buffer_pP,
|
||||
const tb_size_t tb_sizeP)
|
||||
const nr_rlc_data_ind_t *data,
|
||||
int num_data)
|
||||
{
|
||||
if (gnb_flagP)
|
||||
T(T_ENB_RLC_MAC_UL, T_INT(module_idP), T_INT(ue_id), T_INT(channel_idP), T_INT(tb_sizeP));
|
||||
for (int i = 0; i < num_data; ++i)
|
||||
T(T_ENB_RLC_MAC_UL, T_INT(module_idP), T_INT(ue_id), T_INT(data[i].ch), T_INT(data[i].len));
|
||||
|
||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||
nr_rlc_ue_t *ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, ue_id);
|
||||
@@ -176,15 +176,16 @@ void nr_mac_rlc_data_ind(const module_id_t module_idP,
|
||||
if(ue == NULL)
|
||||
LOG_I(RLC, "RLC instance for the given UE was not found \n");
|
||||
|
||||
nr_rlc_entity_t *rb = get_rlc_entity_from_lcid(ue, channel_idP);
|
||||
|
||||
if (rb != NULL) {
|
||||
LOG_D(RLC, "RB found! (channel ID %d) \n", channel_idP);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
|
||||
} else {
|
||||
LOG_E(RLC, "Fatal: no RB found (channel ID %d UE ID %d)\n", channel_idP, ue_id);
|
||||
// exit(1);
|
||||
for (int i = 0; i < num_data; ++i) {
|
||||
logical_chan_id_t ch = data[i].ch;
|
||||
nr_rlc_entity_t *rb = get_rlc_entity_from_lcid(ue, ch);
|
||||
if (rb != NULL) {
|
||||
LOG_D(RLC, "RB found! (channel ID %d) \n", ch);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
rb->recv_pdu(rb, (char *)data[i].buf, data[i].len);
|
||||
} else {
|
||||
LOG_W(RLC, "no RB found (channel ID %d UE ID %d)\n", ch, ue_id);
|
||||
}
|
||||
}
|
||||
|
||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||
|
||||
@@ -41,12 +41,16 @@ struct NR_RLC_Config;
|
||||
struct NR_LogicalChannelConfig;
|
||||
|
||||
int nr_rlc_module_init(nr_rlc_op_mode_t mode);
|
||||
typedef struct nr_rlc_data_ind {
|
||||
logical_chan_id_t ch;
|
||||
uint8_t *buf;
|
||||
tb_size_t len;
|
||||
} nr_rlc_data_ind_t;
|
||||
void nr_mac_rlc_data_ind(const module_id_t module_idP,
|
||||
const uint16_t ue_id,
|
||||
const bool gnb_flagP,
|
||||
const logical_chan_id_t channel_idP,
|
||||
char *buffer_pP,
|
||||
const tb_size_t tb_sizeP);
|
||||
const nr_rlc_data_ind_t *data,
|
||||
int num_data);
|
||||
tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP,
|
||||
const uint16_t ue_id,
|
||||
const bool gnb_flagP,
|
||||
|
||||
Reference in New Issue
Block a user