Commit d0a6be27 authored by Robert Schmidt's avatar Robert Schmidt

RLC data ind: change API to handle multiple TB, but use only one

parent f8aeba44
...@@ -3971,7 +3971,8 @@ static void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_ ...@@ -3971,7 +3971,8 @@ static void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_
if (mac_len > 0) { 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: "); 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; break;
case DL_SCH_LCID_TCI_STATE_ACT_UE_SPEC_PDSCH: 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_ ...@@ -4091,7 +4092,8 @@ static void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_
break; break;
} }
LOG_D(NR_MAC, "%4d.%2d : DLSCH -> LCID %d %d bytes\n", frameP, slot, rx_lcid, mac_len); 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; break;
default: default:
LOG_W(MAC, "unknown lcid %02x\n", rx_lcid); LOG_W(MAC, "unknown lcid %02x\n", rx_lcid);
......
...@@ -456,7 +456,8 @@ static int nr_process_mac_pdu(instance_t module_idP, ...@@ -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)) { 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 { } else {
LOG_E(NR_MAC, "prepare_initial_ul_rrc_message() returned false, cannot forward CCCH message\n"); 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, ...@@ -475,7 +476,8 @@ static int nr_process_mac_pdu(instance_t module_idP,
if (!srbc || srbc->suspended) { if (!srbc || srbc->suspended) {
LOG_I(NR_MAC, "RNTI %04x LCID %d: ignoring %d bytes\n", UE->rnti, lcid, mac_len); LOG_I(NR_MAC, "RNTI %04x LCID %d: ignoring %d bytes\n", UE->rnti, lcid, mac_len);
} else { } 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.total_sdu_bytes += mac_len;
UE->mac_stats.ul.lc_bytes[lcid] += 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, ...@@ -499,7 +501,8 @@ static int nr_process_mac_pdu(instance_t module_idP,
} else { } else {
UE->mac_stats.ul.lc_bytes[lcid] += mac_len; 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; sdus += 1;
/* Updated estimated buffer when receiving data */ /* Updated estimated buffer when receiving data */
......
...@@ -163,12 +163,12 @@ void nr_rlc_release_entity(int ue_id, logical_chan_id_t channel_id) ...@@ -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, void nr_mac_rlc_data_ind(const module_id_t module_idP,
const uint16_t ue_id, const uint16_t ue_id,
const bool gnb_flagP, const bool gnb_flagP,
const logical_chan_id_t channel_idP, const nr_rlc_data_ind_t *data,
char *buffer_pP, int num_data)
const tb_size_t tb_sizeP)
{ {
if (gnb_flagP) 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_manager_lock(nr_rlc_ue_manager);
nr_rlc_ue_t *ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, ue_id); 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, ...@@ -176,15 +176,16 @@ void nr_mac_rlc_data_ind(const module_id_t module_idP,
if(ue == NULL) if(ue == NULL)
LOG_I(RLC, "RLC instance for the given UE was not found \n"); 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); for (int i = 0; i < num_data; ++i) {
logical_chan_id_t ch = data[i].ch;
if (rb != NULL) { nr_rlc_entity_t *rb = get_rlc_entity_from_lcid(ue, ch);
LOG_D(RLC, "RB found! (channel ID %d) \n", channel_idP); if (rb != NULL) {
rb->set_time(rb, get_nr_rlc_current_time()); LOG_D(RLC, "RB found! (channel ID %d) \n", ch);
rb->recv_pdu(rb, buffer_pP, tb_sizeP); rb->set_time(rb, get_nr_rlc_current_time());
} else { rb->recv_pdu(rb, (char *)data[i].buf, data[i].len);
LOG_E(RLC, "Fatal: no RB found (channel ID %d UE ID %d)\n", channel_idP, ue_id); } else {
// exit(1); LOG_W(RLC, "no RB found (channel ID %d UE ID %d)\n", ch, ue_id);
}
} }
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
......
...@@ -41,12 +41,16 @@ struct NR_RLC_Config; ...@@ -41,12 +41,16 @@ struct NR_RLC_Config;
struct NR_LogicalChannelConfig; struct NR_LogicalChannelConfig;
int nr_rlc_module_init(nr_rlc_op_mode_t mode); 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, void nr_mac_rlc_data_ind(const module_id_t module_idP,
const uint16_t ue_id, const uint16_t ue_id,
const bool gnb_flagP, const bool gnb_flagP,
const logical_chan_id_t channel_idP, const nr_rlc_data_ind_t *data,
char *buffer_pP, int num_data);
const tb_size_t tb_sizeP);
tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP, tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP,
const uint16_t ue_id, const uint16_t ue_id,
const bool gnb_flagP, const bool gnb_flagP,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment