improving handling of TDAs and other fixes
This commit is contained in:
@@ -938,7 +938,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
||||
long mapping_type_ul = pusch_TimeDomainAllocationList ? pusch_TimeDomainAllocationList->list.array[0]->mappingType : NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
|
||||
|
||||
NR_PDSCH_Config_t *pdsch_Config = mac->current_DL_BWP.pdsch_Config;
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = mac->current_DL_BWP.tdaList;
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = mac->current_DL_BWP.tdaList_Common;
|
||||
long mapping_type_dl = pdsch_TimeDomainAllocationList ? pdsch_TimeDomainAllocationList->list.array[0]->mappingType : NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
|
||||
|
||||
NR_DMRS_DownlinkConfig_t *NR_DMRS_dlconfig = NULL;
|
||||
|
||||
@@ -251,10 +251,10 @@ void nr_dlsim_preprocessor(module_id_t module_id,
|
||||
* configuration */
|
||||
current_BWP->mcsTableIdx = g_mcsTableIdx;
|
||||
sched_pdsch->time_domain_allocation = get_dl_tda(RC.nrmac[module_id], scc, slot);
|
||||
AssertFatal(sched_pdsch->time_domain_allocation>=0,"Unable to find PDSCH time domain allocation in list\n");
|
||||
AssertFatal(sched_pdsch->time_domain_allocation >= 0,"Unable to find PDSCH time domain allocation in list\n");
|
||||
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdalist = get_dl_tdalist(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
sched_pdsch->tda_info = nr_get_pdsch_tda_info(tdalist, sched_pdsch->time_domain_allocation);
|
||||
sched_pdsch->tda_info = get_dl_tda_info(current_BWP, sched_ctrl->search_space->searchSpaceType->present, sched_pdsch->time_domain_allocation,
|
||||
NR_MIB__dmrs_TypeA_Position_pos2, 1, NR_RNTI_C, sched_ctrl->coreset->controlResourceSetId, false);
|
||||
|
||||
sched_pdsch->dmrs_parms = get_dl_dmrs_params(scc,
|
||||
current_BWP,
|
||||
|
||||
@@ -574,7 +574,7 @@ typedef struct NR_UE_DL_BWP {
|
||||
uint16_t BWPStart;
|
||||
uint16_t initial_BWPSize;
|
||||
uint16_t initial_BWPStart;
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdaList;
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdaList_Common;
|
||||
NR_PDSCH_Config_t *pdsch_Config;
|
||||
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig;
|
||||
long *pdsch_HARQ_ACK_Codebook;
|
||||
@@ -593,7 +593,7 @@ typedef struct NR_UE_UL_BWP {
|
||||
uint16_t initial_BWPStart;
|
||||
NR_RACH_ConfigCommon_t *rach_ConfigCommon;
|
||||
NR_PUSCH_ServingCellConfig_t *pusch_servingcellconfig;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList_Common;
|
||||
NR_ConfiguredGrantConfig_t *configuredGrantConfig;
|
||||
NR_PUSCH_Config_t *pusch_Config;
|
||||
NR_PUCCH_Config_t *pucch_Config;
|
||||
@@ -608,14 +608,23 @@ typedef struct NR_UE_UL_BWP {
|
||||
int max_fb_time;
|
||||
} NR_UE_UL_BWP_t;
|
||||
|
||||
typedef enum { typeA = 0, typeB = 1 } mappingType_t;
|
||||
typedef enum {
|
||||
defaultA = 0,
|
||||
defaultB = 1,
|
||||
defaultC = 2
|
||||
} default_table_type_t;
|
||||
|
||||
typedef struct NR_ul_tda_info {
|
||||
typedef enum {
|
||||
typeA = 0,
|
||||
typeB = 1
|
||||
} mappingType_t;
|
||||
|
||||
typedef struct NR_tda_info {
|
||||
mappingType_t mapping_type;
|
||||
int startSymbolIndex;
|
||||
int nrOfSymbols;
|
||||
long k2;
|
||||
} NR_ul_tda_info_t;
|
||||
} NR_tda_info_t;
|
||||
|
||||
#endif /*__LAYER2_MAC_H__ */
|
||||
|
||||
|
||||
@@ -458,10 +458,13 @@ const uint8_t table_6_1_2_1_1_3[16][4] = {
|
||||
{0, 3, 0, 10} // row index 16
|
||||
};
|
||||
|
||||
NR_ul_tda_info_t get_ul_tda_info(NR_PUSCH_TimeDomainResourceAllocationList_t *tdalist, int tda_index, int scs, bool normal_CP)
|
||||
NR_tda_info_t get_ul_tda_info(const NR_UE_UL_BWP_t *ul_bwp, int controlResourceSetId, int ss_type, nr_rnti_type_t rnti_type, int tda_index)
|
||||
{
|
||||
NR_ul_tda_info_t tda_info = {0};
|
||||
NR_tda_info_t tda_info = {0};
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdalist = get_ul_tdalist(ul_bwp, controlResourceSetId, ss_type, rnti_type);
|
||||
// Definition of value j in Table 6.1.2.1.1-4 of 38.214
|
||||
int scs = ul_bwp->scs;
|
||||
AssertFatal(scs >= 0 && scs < 5, "Subcarrier spacing indicatior %d invalid value\n", scs);
|
||||
int j = scs == 0 ? 1 : scs;
|
||||
if (tdalist) {
|
||||
AssertFatal(tda_index < tdalist->list.count, "TDA index from DCI %d exceeds TDA list array size %d\n", tda_index, tdalist->list.count);
|
||||
@@ -475,6 +478,7 @@ NR_ul_tda_info_t get_ul_tda_info(NR_PUSCH_TimeDomainResourceAllocationList_t *td
|
||||
tda_info.startSymbolIndex = S;
|
||||
tda_info.nrOfSymbols = L;
|
||||
} else {
|
||||
bool normal_CP = ul_bwp->cyclicprefix ? false : true;
|
||||
if (normal_CP) {
|
||||
tda_info.mapping_type = table_6_1_2_1_1_2[tda_index][0];
|
||||
tda_info.k2 = table_6_1_2_1_1_2[tda_index][1] + j;
|
||||
@@ -490,79 +494,155 @@ NR_ul_tda_info_t get_ul_tda_info(NR_PUSCH_TimeDomainResourceAllocationList_t *td
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
void get_info_from_tda_tables(int default_abc,
|
||||
int tda,
|
||||
int dmrs_TypeA_Position,
|
||||
int normal_CP,
|
||||
bool *is_mapping_typeA,
|
||||
int *startSymbolIndex,
|
||||
int *nrOfSymbols) {
|
||||
NR_tda_info_t get_info_from_tda_tables(default_table_type_t table_type,
|
||||
int tda,
|
||||
int dmrs_TypeA_Position,
|
||||
int normal_CP)
|
||||
{
|
||||
NR_tda_info_t tda_info = {0};
|
||||
bool is_mapping_typeA;
|
||||
int k0 = 0;
|
||||
switch(default_abc){
|
||||
case 1:
|
||||
switch(table_type){
|
||||
case defaultA:
|
||||
if (normal_CP){
|
||||
if (dmrs_TypeA_Position){
|
||||
*is_mapping_typeA = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][0];
|
||||
k0 = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[tda][3];
|
||||
}
|
||||
else{
|
||||
*is_mapping_typeA = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][0];
|
||||
k0 = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[tda][3];
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (dmrs_TypeA_Position){
|
||||
*is_mapping_typeA = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][0];
|
||||
k0 = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos3[tda][3];
|
||||
}
|
||||
else{
|
||||
*is_mapping_typeA = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][0];
|
||||
k0 = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_3_time_dom_res_alloc_A_extCP_dmrs_typeA_pos2[tda][3];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case defaultB:
|
||||
if (dmrs_TypeA_Position){
|
||||
*is_mapping_typeA = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][0];
|
||||
k0 = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos3[tda][3];
|
||||
}
|
||||
else{
|
||||
*is_mapping_typeA = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][0];
|
||||
k0 = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_4_time_dom_res_alloc_B_dmrs_typeA_pos2[tda][3];
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case defaultC:
|
||||
if (dmrs_TypeA_Position){
|
||||
*is_mapping_typeA = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][0];
|
||||
k0 = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[tda][3];
|
||||
}
|
||||
else{
|
||||
*is_mapping_typeA = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][0];
|
||||
is_mapping_typeA = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][0];
|
||||
k0 = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][1];
|
||||
*startSymbolIndex = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][2];
|
||||
*nrOfSymbols = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][3];
|
||||
tda_info.startSymbolIndex = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][2];
|
||||
tda_info.nrOfSymbols = table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos2[tda][3];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid default time domaing allocation type\n");
|
||||
AssertFatal(1 == 0, "Invalid default time domaing allocation type\n");
|
||||
}
|
||||
AssertFatal(k0==0,"Only k0 = 0 is supported\n");
|
||||
AssertFatal(k0 == 0, "Only k0 = 0 is supported\n");
|
||||
tda_info.mapping_type = is_mapping_typeA ? typeA : typeB;
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
default_table_type_t get_default_table_type(int mux_pattern)
|
||||
{
|
||||
switch (mux_pattern) {
|
||||
case 1:
|
||||
return defaultA;
|
||||
case 2:
|
||||
return defaultB;
|
||||
case 3:
|
||||
return defaultC;
|
||||
default :
|
||||
AssertFatal(1 == 0, "Invalid multiplexing type %d\n", mux_pattern);
|
||||
}
|
||||
}
|
||||
|
||||
NR_tda_info_t set_tda_info_from_list(NR_PDSCH_TimeDomainResourceAllocationList_t *tdalist, int tda_index)
|
||||
{
|
||||
NR_tda_info_t tda_info = {0};
|
||||
AssertFatal(tda_index < tdalist->list.count, "TDA index from DCI %d exceeds TDA list array size %d\n", tda_index, tdalist->list.count);
|
||||
NR_PDSCH_TimeDomainResourceAllocation_t *tda = tdalist->list.array[tda_index];
|
||||
tda_info.mapping_type = tda->mappingType;
|
||||
int S, L;
|
||||
SLIV2SL(tda->startSymbolAndLength, &S, &L);
|
||||
tda_info.startSymbolIndex = S;
|
||||
tda_info.nrOfSymbols = L;
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
NR_tda_info_t get_dl_tda_info(const NR_UE_DL_BWP_t *dl_BWP, int ss_type, int tda_index, int dmrs_typeA_pos,
|
||||
int mux_pattern, nr_rnti_type_t rnti_type, int coresetid, bool sib1)
|
||||
{
|
||||
NR_tda_info_t tda_info;
|
||||
bool normal_CP = dl_BWP->cyclicprefix ? false : true;
|
||||
// implements Table 5.1.2.1.1-1 of 38.214
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdalist = get_dl_tdalist(dl_BWP, coresetid, ss_type, rnti_type);
|
||||
switch (rnti_type) {
|
||||
case NR_RNTI_SI:
|
||||
if(sib1) {
|
||||
default_table_type_t table_type = get_default_table_type(mux_pattern);
|
||||
tda_info = get_info_from_tda_tables(table_type, tda_index, dmrs_typeA_pos, normal_CP);
|
||||
}
|
||||
else {
|
||||
if(tdalist)
|
||||
tda_info = set_tda_info_from_list(tdalist, tda_index);
|
||||
else {
|
||||
default_table_type_t table_type = get_default_table_type(mux_pattern);
|
||||
tda_info = get_info_from_tda_tables(table_type, tda_index, dmrs_typeA_pos, normal_CP);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NR_RNTI_P:
|
||||
if(tdalist)
|
||||
tda_info = set_tda_info_from_list(tdalist, tda_index);
|
||||
else {
|
||||
default_table_type_t table_type = get_default_table_type(mux_pattern);
|
||||
tda_info = get_info_from_tda_tables(table_type, tda_index, dmrs_typeA_pos, normal_CP);
|
||||
}
|
||||
break;
|
||||
case NR_RNTI_C:
|
||||
case NR_RNTI_CS:
|
||||
case NR_RNTI_MCS_C:
|
||||
case NR_RNTI_RA:
|
||||
case NR_RNTI_TC:
|
||||
if(tdalist)
|
||||
tda_info = set_tda_info_from_list(tdalist, tda_index);
|
||||
else
|
||||
tda_info = get_info_from_tda_tables(defaultA, tda_index, dmrs_typeA_pos, normal_CP);
|
||||
break;
|
||||
default :
|
||||
AssertFatal(1 == 0, "Invalid RNTI type\n");
|
||||
}
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
|
||||
const char *prachfmt[]={"0","1","2","3", "A1","A2","A3","B1","B4","C0","C2","A1/B1","A2/B2","A3/B3"};
|
||||
|
||||
uint16_t get_NCS(uint8_t index, uint16_t format0, uint8_t restricted_set_config) {
|
||||
@@ -3187,7 +3267,7 @@ NR_PDSCH_TimeDomainResourceAllocationList_t *get_dl_tdalist(const NR_UE_DL_BWP_t
|
||||
&& (DL_BWP->pdsch_Config && DL_BWP->pdsch_Config->pdsch_TimeDomainAllocationList))
|
||||
return DL_BWP->pdsch_Config->pdsch_TimeDomainAllocationList->choice.setup;
|
||||
else
|
||||
return DL_BWP->tdaList;
|
||||
return DL_BWP->tdaList_Common;
|
||||
}
|
||||
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *get_ul_tdalist(const NR_UE_UL_BWP_t *UL_BWP, int controlResourceSetId, int ss_type, nr_rnti_type_t rnti_type)
|
||||
@@ -3196,7 +3276,7 @@ NR_PUSCH_TimeDomainResourceAllocationList_t *get_ul_tdalist(const NR_UE_UL_BWP_t
|
||||
&& (UL_BWP->pusch_Config && UL_BWP->pusch_Config->pusch_TimeDomainAllocationList))
|
||||
return UL_BWP->pusch_Config->pusch_TimeDomainAllocationList->choice.setup;
|
||||
else
|
||||
return UL_BWP->tdaList;
|
||||
return UL_BWP->tdaList_Common;
|
||||
}
|
||||
|
||||
uint16_t get_rb_bwp_dci(nr_dci_format_t format,
|
||||
@@ -3312,10 +3392,7 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
size += dci_pdu->frequency_domain_assignment.nbits;
|
||||
// Time domain assignment
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdalistul = get_ul_tdalist(UL_BWP, coreset->controlResourceSetId, ss_type, rnti_type);
|
||||
if (tdalistul)
|
||||
num_entries = tdalistul->list.count;
|
||||
else
|
||||
num_entries = 16; // num of entries in default table
|
||||
num_entries = tdalistul ? tdalistul->list.count : 16; // 16 in default table
|
||||
dci_pdu->time_domain_assignment.nbits = (int)ceil(log2(num_entries));
|
||||
LOG_D(NR_MAC, "PUSCH Time Domain Allocation nbits %d, pusch_Config %p\n", dci_pdu->time_domain_assignment.nbits, pusch_Config);
|
||||
size += dci_pdu->time_domain_assignment.nbits;
|
||||
@@ -3457,10 +3534,7 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
size += dci_pdu->frequency_domain_assignment.nbits;
|
||||
LOG_D(NR_MAC,"dci_pdu->frequency_domain_assignment.nbits %d (N_RB %d)\n",dci_pdu->frequency_domain_assignment.nbits,N_RB);
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdalist = get_dl_tdalist(DL_BWP, coreset->controlResourceSetId, ss_type, rnti_type);
|
||||
if (tdalist)
|
||||
num_entries = tdalist->list.count;
|
||||
else
|
||||
num_entries = 16; // num of entries in default table
|
||||
num_entries = tdalist ? tdalist->list.count : 16; // 16 in default table
|
||||
dci_pdu->time_domain_assignment.nbits = (int)ceil(log2(num_entries));
|
||||
LOG_D(NR_MAC,"pdsch tda.nbits= %d\n",dci_pdu->time_domain_assignment.nbits);
|
||||
size += dci_pdu->time_domain_assignment.nbits;
|
||||
|
||||
@@ -88,7 +88,10 @@ NR_PDSCH_TimeDomainResourceAllocationList_t *get_dl_tdalist(const NR_UE_DL_BWP_t
|
||||
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *get_ul_tdalist(const NR_UE_UL_BWP_t *UL_BWP, int controlResourceSetId, int ss_type, nr_rnti_type_t rnti_type);
|
||||
|
||||
NR_ul_tda_info_t get_ul_tda_info(NR_PUSCH_TimeDomainResourceAllocationList_t *tdalist, int tda_index, int scs, bool normal_CP);
|
||||
NR_tda_info_t get_ul_tda_info(const NR_UE_UL_BWP_t *ul_bwp, int controlResourceSetId, int ss_type, nr_rnti_type_t rnti_type, int tda_index);
|
||||
|
||||
NR_tda_info_t get_dl_tda_info(const NR_UE_DL_BWP_t *dl_BWP, int ss_type, int tda_index, int dmrs_typeA_pos,
|
||||
int mux_pattern, nr_rnti_type_t rnti_type, int coresetid, bool sib1);
|
||||
|
||||
uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
const NR_UE_UL_BWP_t *UL_BWP,
|
||||
@@ -219,13 +222,12 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
|
||||
|
||||
uint16_t get_ssb_start_symbol(const long band, NR_SubcarrierSpacing_t scs, int i_ssb);
|
||||
|
||||
void get_info_from_tda_tables(int default_abc,
|
||||
int tda,
|
||||
int dmrs_TypeA_Position,
|
||||
int normal_CP,
|
||||
bool *is_mapping_typeA,
|
||||
int *startSymbolIndex,
|
||||
int *nrOfSymbols);
|
||||
NR_tda_info_t get_info_from_tda_tables(default_table_type_t table_type,
|
||||
int tda,
|
||||
int dmrs_TypeA_Position,
|
||||
int normal_CP);
|
||||
|
||||
default_table_type_t get_default_table_type(int mux_pattern);
|
||||
|
||||
void fill_coresetZero(NR_ControlResourceSet_t *coreset0, NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config);
|
||||
void fill_searchSpaceZero(NR_SearchSpace_t *ss0, NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config);
|
||||
|
||||
@@ -565,9 +565,9 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
||||
|
||||
DL_BWP->pdsch_Config = NULL;
|
||||
if (bwp_dlcommon->pdsch_ConfigCommon)
|
||||
DL_BWP->tdaList = bwp_dlcommon->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
DL_BWP->tdaList_Common = bwp_dlcommon->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
if (bwp_ulcommon->pusch_ConfigCommon) {
|
||||
UL_BWP->tdaList = bwp_ulcommon->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->tdaList_Common = bwp_ulcommon->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->msg3_DeltaPreamble = bwp_ulcommon->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble;
|
||||
}
|
||||
if (bwp_ulcommon->pucch_ConfigCommon)
|
||||
@@ -598,10 +598,13 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
||||
bwp_dlcommon = mac->scc->downlinkConfigCommon->initialDownlinkBWP;
|
||||
bwp_ulcommon = mac->scc->uplinkConfigCommon->initialUplinkBWP;
|
||||
}
|
||||
if (mac->scc_SIB) {
|
||||
else if (mac->scc_SIB) {
|
||||
bwp_dlcommon = &mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP;
|
||||
bwp_ulcommon = &mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP;
|
||||
}
|
||||
else
|
||||
AssertFatal(false, "Either SCC or SCC SIB should be non-NULL\n");
|
||||
|
||||
NR_BWP_Downlink_t *bwp_downlink = NULL;
|
||||
const struct NR_ServingCellConfig__downlinkBWP_ToAddModList *bwpList = spCellConfigDedicated->downlinkBWP_ToAddModList;
|
||||
if (bwpList)
|
||||
@@ -615,12 +618,12 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
||||
AssertFatal(bwp_downlink != NULL,"Couldn't find DLBWP corresponding to BWP ID %ld\n", DL_BWP->bwp_id);
|
||||
dl_genericParameters = bwp_downlink->bwp_Common->genericParameters;
|
||||
DL_BWP->pdsch_Config = bwp_downlink->bwp_Dedicated->pdsch_Config->choice.setup;
|
||||
DL_BWP->tdaList = bwp_downlink->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
DL_BWP->tdaList_Common = bwp_downlink->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
}
|
||||
else {
|
||||
dl_genericParameters = bwp_dlcommon->genericParameters;
|
||||
DL_BWP->pdsch_Config = spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup;
|
||||
DL_BWP->tdaList = bwp_dlcommon->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
DL_BWP->tdaList_Common = bwp_dlcommon->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
}
|
||||
|
||||
UL_BWP->msg3_DeltaPreamble = bwp_ulcommon->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble;
|
||||
@@ -637,7 +640,7 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
||||
}
|
||||
AssertFatal(bwp_uplink != NULL,"Couldn't find ULBWP corresponding to BWP ID %ld\n",UL_BWP->bwp_id);
|
||||
ul_genericParameters = bwp_uplink->bwp_Common->genericParameters;
|
||||
UL_BWP->tdaList = bwp_uplink->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->tdaList_Common = bwp_uplink->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->pusch_Config = bwp_uplink->bwp_Dedicated->pusch_Config->choice.setup;
|
||||
UL_BWP->pucch_Config = bwp_uplink->bwp_Dedicated->pucch_Config->choice.setup;
|
||||
UL_BWP->srs_Config = bwp_uplink->bwp_Dedicated->srs_Config->choice.setup;
|
||||
@@ -648,7 +651,7 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac,
|
||||
UL_BWP->rach_ConfigCommon = bwp_uplink->bwp_Common->rach_ConfigCommon->choice.setup;
|
||||
}
|
||||
else {
|
||||
UL_BWP->tdaList = bwp_ulcommon->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->tdaList_Common = bwp_ulcommon->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->pusch_Config = spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pusch_Config->choice.setup;
|
||||
UL_BWP->pucch_Config = spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
|
||||
UL_BWP->srs_Config = spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config->choice.setup;
|
||||
|
||||
@@ -253,14 +253,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
|
||||
|
||||
NR_BWP_DownlinkCommon_t *get_bwp_downlink_common(NR_UE_MAC_INST_t *mac, NR_BWP_Id_t dl_bwp_id);
|
||||
|
||||
int8_t nr_ue_process_dci_time_dom_resource_assignment(NR_UE_MAC_INST_t *mac,
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList,
|
||||
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu,
|
||||
int *mapping_type,
|
||||
uint8_t time_domain_ind,
|
||||
int default_abc,
|
||||
bool use_default);
|
||||
|
||||
uint8_t nr_ue_get_sdu(module_id_t module_idP,
|
||||
int cc_id,
|
||||
frame_t frameP,
|
||||
@@ -474,6 +466,6 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti);
|
||||
// - 6.1.4.2 of TS 38.214
|
||||
// - 6.4.1.1.1 of TS 38.211
|
||||
// - 6.3.1.7 of 38.211
|
||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_ul_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format);
|
||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format);
|
||||
#endif
|
||||
/** @}*/
|
||||
|
||||
@@ -192,7 +192,8 @@ NR_BWP_DownlinkCommon_t *get_bwp_downlink_common(NR_UE_MAC_INST_t *mac, NR_BWP_I
|
||||
return bwp_Common;
|
||||
}
|
||||
|
||||
int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti){
|
||||
int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti)
|
||||
{
|
||||
|
||||
RA_config_t *ra = &mac->ra;
|
||||
int rnti_type;
|
||||
@@ -410,63 +411,6 @@ int8_t nr_ue_process_dci_freq_dom_resource_assignment(nfapi_nr_ue_pusch_pdu_t *p
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t nr_ue_process_dci_time_dom_resource_assignment(NR_UE_MAC_INST_t *mac,
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList,
|
||||
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu,
|
||||
int *mapping_type,
|
||||
uint8_t time_domain_ind,
|
||||
int default_abc,
|
||||
bool use_default)
|
||||
{
|
||||
int dmrs_typeA_pos = (mac->scc != NULL) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position;
|
||||
|
||||
// uint8_t k_offset=0;
|
||||
int sliv_S=0;
|
||||
int sliv_L=0;
|
||||
|
||||
/*
|
||||
* TS 38.214 subclause 5.1.2.1 Resource allocation in time domain (downlink)
|
||||
*/
|
||||
if(dlsch_config_pdu != NULL){
|
||||
if (pdsch_TimeDomainAllocationList && use_default==false) {
|
||||
|
||||
if (time_domain_ind >= pdsch_TimeDomainAllocationList->list.count) {
|
||||
LOG_E(MAC, "time_domain_ind %d >= pdsch->TimeDomainAllocationList->list.count %d\n",
|
||||
time_domain_ind, pdsch_TimeDomainAllocationList->list.count);
|
||||
dlsch_config_pdu->start_symbol = 0;
|
||||
dlsch_config_pdu->number_symbols = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int startSymbolAndLength = pdsch_TimeDomainAllocationList->list.array[time_domain_ind]->startSymbolAndLength;
|
||||
int S,L;
|
||||
SLIV2SL(startSymbolAndLength,&S,&L);
|
||||
dlsch_config_pdu->start_symbol=S;
|
||||
dlsch_config_pdu->number_symbols=L;
|
||||
|
||||
LOG_D(MAC,"SLIV = %i\n", startSymbolAndLength);
|
||||
LOG_D(MAC,"start_symbol = %i\n", dlsch_config_pdu->start_symbol);
|
||||
LOG_D(MAC,"number_symbols = %i\n", dlsch_config_pdu->number_symbols);
|
||||
|
||||
}
|
||||
else {// Default configuration from tables
|
||||
|
||||
bool is_typeA;
|
||||
get_info_from_tda_tables(default_abc,
|
||||
time_domain_ind,
|
||||
dmrs_typeA_pos,
|
||||
1, // normal CP
|
||||
&is_typeA,
|
||||
&sliv_S,
|
||||
&sliv_L);
|
||||
*mapping_type = is_typeA? typeA : typeB;
|
||||
dlsch_config_pdu->number_symbols = sliv_L;
|
||||
dlsch_config_pdu->start_symbol = sliv_S;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||
@@ -500,13 +444,10 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
uint8_t is_Msg3 = 0;
|
||||
NR_UE_DL_BWP_t *current_DL_BWP = &mac->current_DL_BWP;
|
||||
NR_UE_UL_BWP_t *current_UL_BWP = &mac->current_UL_BWP;
|
||||
int default_abc = 1;
|
||||
int mux_pattern = 1;
|
||||
|
||||
LOG_D(MAC, "In %s: Processing received DCI format %s\n", __FUNCTION__, dci_formats[dci_format]);
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = NULL;
|
||||
bool normal_CP = current_UL_BWP->cyclicprefix ? false : true;
|
||||
NR_ul_tda_info_t tda_info = {0};
|
||||
NR_tda_info_t tda_info = {0};
|
||||
NR_PUCCH_Config_t *pucch_Config = current_UL_BWP->pucch_Config;
|
||||
|
||||
switch(dci_format){
|
||||
@@ -532,8 +473,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
// - SUL_IND_0_0
|
||||
|
||||
// Schedule PUSCH
|
||||
pusch_TimeDomainAllocationList = get_ul_tdalist(current_UL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti));
|
||||
tda_info = get_ul_tda_info(pusch_TimeDomainAllocationList, dci->time_domain_assignment.val, current_UL_BWP->scs, normal_CP);
|
||||
tda_info = get_ul_tda_info(current_UL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti), dci->time_domain_assignment.val);
|
||||
if (tda_info.nrOfSymbols == 0)
|
||||
ret = -1;
|
||||
else
|
||||
@@ -597,8 +537,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
// - SRS_RESOURCE_IND
|
||||
|
||||
// Schedule PUSCH
|
||||
pusch_TimeDomainAllocationList = get_ul_tdalist(current_UL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti));
|
||||
tda_info = get_ul_tda_info(pusch_TimeDomainAllocationList, dci->time_domain_assignment.val, current_UL_BWP->scs, normal_CP);
|
||||
tda_info = get_ul_tda_info(current_UL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti), dci->time_domain_assignment.val);
|
||||
if (tda_info.nrOfSymbols == 0)
|
||||
ret = -1;
|
||||
else
|
||||
@@ -696,7 +635,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
}
|
||||
if(rnti == SI_RNTI) {
|
||||
NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config = mac->type0_PDCCH_CSS_config;
|
||||
default_abc = type0_PDCCH_CSS_config.type0_pdcch_ss_mux_pattern;
|
||||
mux_pattern = type0_PDCCH_CSS_config.type0_pdcch_ss_mux_pattern;
|
||||
dl_config->dl_config_list[dl_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH;
|
||||
dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon;
|
||||
if (pdsch_config) pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL; // For PDSCH with mapping type A, the UE shall assume dmrs-AdditionalPosition='pos2'
|
||||
@@ -720,19 +659,18 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
return -1;
|
||||
}
|
||||
|
||||
int mappingtype;
|
||||
/* TIME_DOM_RESOURCE_ASSIGNMENT */
|
||||
pdsch_TimeDomainAllocationList = get_dl_tdalist(current_DL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti));
|
||||
if (nr_ue_process_dci_time_dom_resource_assignment(mac, pdsch_TimeDomainAllocationList, dlsch_config_pdu_1_0, &mappingtype, dci->time_domain_assignment.val, default_abc, rnti == SI_RNTI) < 0) {
|
||||
LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
|
||||
return -1;
|
||||
}
|
||||
if (pdsch_TimeDomainAllocationList)
|
||||
mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
|
||||
int dmrs_typeA_pos = (mac->scc != NULL) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position;
|
||||
// TODO need to differentiate SI_RNTI between SIB1 and other SIB
|
||||
NR_tda_info_t tda_info = get_dl_tda_info(current_DL_BWP, dci_ind->ss_type, dci->time_domain_assignment.val,
|
||||
dmrs_typeA_pos, mux_pattern, get_rnti_type(mac, rnti), coreset_type, rnti == SI_RNTI);
|
||||
|
||||
dlsch_config_pdu_1_0->number_symbols = tda_info.nrOfSymbols;
|
||||
dlsch_config_pdu_1_0->start_symbol = tda_info.startSymbolIndex;
|
||||
|
||||
struct NR_DMRS_DownlinkConfig *dl_dmrs_config = NULL;
|
||||
if (pdsch_config)
|
||||
dl_dmrs_config = (mappingtype == typeA) ? pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
dl_dmrs_config = (tda_info.mapping_type == typeA) ? pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
|
||||
dlsch_config_pdu_1_0->nscid = 0;
|
||||
if(dl_dmrs_config && dl_dmrs_config->scramblingID0)
|
||||
@@ -746,7 +684,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
(get_softmodem_params()->nsa) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position,
|
||||
dlsch_config_pdu_1_0->number_symbols,
|
||||
dlsch_config_pdu_1_0->start_symbol,
|
||||
mappingtype,
|
||||
tda_info.mapping_type,
|
||||
1);
|
||||
|
||||
dlsch_config_pdu_1_0->dmrsConfigType = (dl_dmrs_config != NULL) ?
|
||||
@@ -930,17 +868,14 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
return -1;
|
||||
}
|
||||
/* TIME_DOM_RESOURCE_ASSIGNMENT */
|
||||
int mappingtype;
|
||||
int dmrs_typeA_pos = (mac->scc != NULL) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position;
|
||||
NR_tda_info_t tda_info = get_dl_tda_info(current_DL_BWP, dci_ind->ss_type, dci->time_domain_assignment.val,
|
||||
dmrs_typeA_pos, mux_pattern, get_rnti_type(mac, rnti), coreset_type, false);
|
||||
|
||||
pdsch_TimeDomainAllocationList = get_dl_tdalist(current_DL_BWP, coreset_type, dci_ind->ss_type, get_rnti_type(mac, rnti));
|
||||
if (nr_ue_process_dci_time_dom_resource_assignment(mac, pdsch_TimeDomainAllocationList, dlsch_config_pdu_1_1, &mappingtype, dci->time_domain_assignment.val, 0, false) < 0) {
|
||||
LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
|
||||
return -1;
|
||||
}
|
||||
if(pdsch_TimeDomainAllocationList)
|
||||
mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
|
||||
dlsch_config_pdu_1_1->number_symbols = tda_info.nrOfSymbols;
|
||||
dlsch_config_pdu_1_1->start_symbol = tda_info.startSymbolIndex;
|
||||
|
||||
struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (mappingtype == typeA) ?
|
||||
struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (tda_info.mapping_type == typeA) ?
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup :
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
|
||||
@@ -1127,7 +1062,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
mac->scc? mac->scc->dmrs_TypeA_Position:mac->mib->dmrs_TypeA_Position,
|
||||
dlsch_config_pdu_1_1->number_symbols,
|
||||
dlsch_config_pdu_1_1->start_symbol,
|
||||
mappingtype,
|
||||
tda_info.mapping_type,
|
||||
dlsch_config_pdu_1_1->n_front_load_symb);
|
||||
|
||||
/* TCI */
|
||||
@@ -3741,9 +3676,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t
|
||||
|
||||
// Schedule Msg3
|
||||
NR_UE_UL_BWP_t *current_UL_BWP = &mac->current_UL_BWP;
|
||||
bool normal_CP = current_UL_BWP->cyclicprefix ? false : true;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = get_ul_tdalist(current_UL_BWP, *ra->ss->controlResourceSetId, ra->ss->searchSpaceType->present, NR_RNTI_RA);
|
||||
NR_ul_tda_info_t tda_info = get_ul_tda_info(pusch_TimeDomainAllocationList, rar_grant.Msg3_t_alloc, current_UL_BWP->scs, normal_CP);
|
||||
NR_tda_info_t tda_info = get_ul_tda_info(current_UL_BWP, *ra->ss->controlResourceSetId, ra->ss->searchSpaceType->present, NR_RNTI_RA, rar_grant.Msg3_t_alloc);
|
||||
if (tda_info.nrOfSymbols == 0) {
|
||||
LOG_E(MAC, "Cannot schedule Msg3. Something wrong in TDA information\n");
|
||||
return -1;
|
||||
|
||||
@@ -449,7 +449,7 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
|
||||
// - 6.1.4.2 of TS 38.214
|
||||
// - 6.4.1.1.1 of TS 38.211
|
||||
// - 6.3.1.7 of 38.211
|
||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_ul_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format)
|
||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format)
|
||||
{
|
||||
|
||||
int f_alloc;
|
||||
|
||||
@@ -699,7 +699,7 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
|
||||
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
|
||||
NR_UE_UL_BWP_t *ul_bwp = &ra->UL_BWP;
|
||||
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ul_bwp->tdaList;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ul_bwp->tdaList_Common;
|
||||
int mu = ul_bwp->scs;
|
||||
uint8_t K2 = *pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->k2;
|
||||
const int sched_frame = frame + (slot + K2 >= nr_slots_per_frame[mu]);
|
||||
@@ -887,7 +887,7 @@ void nr_get_Msg3alloc(module_id_t module_id,
|
||||
int Msg3maxsymb = 14, Msg3start = 0;
|
||||
ra->Msg3_tda_id = 16; // initialization to a value above limit
|
||||
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ul_bwp->tdaList;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ul_bwp->tdaList_Common;
|
||||
|
||||
const NR_TDD_UL_DL_Pattern_t *tdd = scc->tdd_UL_DL_ConfigurationCommon ? &scc->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL;
|
||||
const int n_slots_frame = nr_slots_per_frame[mu];
|
||||
@@ -1108,8 +1108,8 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
||||
const int ibwp_size = ul_bwp->initial_BWPSize;
|
||||
const int scs = ul_bwp->scs;
|
||||
const int fh = (ul_bwp->pusch_Config && ul_bwp->pusch_Config->frequencyHopping) ? 1 : 0;
|
||||
const int startSymbolAndLength = ul_bwp->tdaList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||
const int mappingtype = ul_bwp->tdaList->list.array[ra->Msg3_tda_id]->mappingType;
|
||||
const int startSymbolAndLength = ul_bwp->tdaList_Common->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||
const int mappingtype = ul_bwp->tdaList_Common->list.array[ra->Msg3_tda_id]->mappingType;
|
||||
|
||||
LOG_D(NR_MAC, "Frame %d, Slot %d Adding Msg3 UL Config Request for (%d,%d) : (%d,%d,%d) for rnti: %d\n",
|
||||
frameP,
|
||||
@@ -1162,13 +1162,13 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
||||
}
|
||||
|
||||
NR_ControlResourceSet_t *coreset = ra->coreset;
|
||||
AssertFatal(coreset != NULL,"Coreset cannot be null for RA-Msg2\n");
|
||||
const int coresetid = coreset->controlResourceSetId;
|
||||
// Calculate number of symbols
|
||||
int time_domain_assignment = get_dl_tda(nr_mac, scc, slotP);
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tda_list = get_dl_tdalist(dl_bwp, coresetid, ss->searchSpaceType->present, NR_RNTI_RA);
|
||||
NR_tda_info_t tda_info = nr_get_pdsch_tda_info(tda_list, time_domain_assignment);
|
||||
|
||||
AssertFatal(coreset!=NULL,"Coreset cannot be null for RA-Msg2\n");
|
||||
int mux_pattern = type0_PDCCH_CSS_config ? type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern : 1;
|
||||
NR_tda_info_t tda_info = get_dl_tda_info(dl_bwp, ss->searchSpaceType->present, time_domain_assignment,
|
||||
scc->dmrs_TypeA_Position, mux_pattern, NR_RNTI_RA, coresetid, false);
|
||||
|
||||
uint16_t *vrb_map = cc[CC_id].vrb_map;
|
||||
for (int i = 0; (i < rbSize) && (rbStart <= (BWPSize - rbSize)); i++) {
|
||||
@@ -1479,8 +1479,10 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
||||
}
|
||||
|
||||
uint8_t time_domain_assignment = get_dl_tda(nr_mac, scc, slotP);
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tda_list = get_dl_tdalist(dl_bwp, coreset->controlResourceSetId, ss->searchSpaceType->present, NR_RNTI_TC);
|
||||
NR_tda_info_t msg4_tda = nr_get_pdsch_tda_info(tda_list, time_domain_assignment);
|
||||
int mux_pattern = type0_PDCCH_CSS_config ? type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern : 1;
|
||||
NR_tda_info_t msg4_tda = get_dl_tda_info(dl_bwp, ss->searchSpaceType->present, time_domain_assignment,
|
||||
scc->dmrs_TypeA_Position, mux_pattern, NR_RNTI_TC, coreset->controlResourceSetId, false);
|
||||
|
||||
NR_pdsch_dmrs_t dmrs_info = get_dl_dmrs_params(scc,
|
||||
dl_bwp,
|
||||
&msg4_tda,
|
||||
|
||||
@@ -569,23 +569,11 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
for (int k=0;k<sib1_sdu_length;k++)
|
||||
LOG_D(NR_MAC,"byte %d : %x\n",k,((uint8_t*)sib1_payload)[k]);
|
||||
|
||||
int startSymbolIndex = 0;
|
||||
int nrOfSymbols = 0;
|
||||
bool is_typeA;
|
||||
default_table_type_t table_type = get_default_table_type(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern);
|
||||
// assuming normal CP
|
||||
NR_tda_info_t tda_info = get_info_from_tda_tables(table_type, time_domain_allocation, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, true);
|
||||
|
||||
get_info_from_tda_tables(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern,
|
||||
time_domain_allocation,
|
||||
gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
|
||||
1, &is_typeA,
|
||||
&startSymbolIndex, &nrOfSymbols);
|
||||
|
||||
AssertFatal((startSymbolIndex+nrOfSymbols)<14,"SIB1 TDA %d would cause overlap with CSI-RS. Please select a different SIB1 TDA.\n",time_domain_allocation);
|
||||
|
||||
NR_tda_info_t tda_info = {
|
||||
.mapping_type = is_typeA ? typeA : typeB,
|
||||
.startSymbolIndex = startSymbolIndex,
|
||||
.nrOfSymbols = nrOfSymbols
|
||||
};
|
||||
AssertFatal((tda_info.startSymbolIndex + tda_info.nrOfSymbols) < 14, "SIB1 TDA %d would cause overlap with CSI-RS. Please select a different SIB1 TDA.\n", time_domain_allocation);
|
||||
|
||||
NR_pdsch_dmrs_t dmrs_parms = get_dl_dmrs_params(scc,
|
||||
NULL,
|
||||
@@ -603,7 +591,7 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
|
||||
nfapi_nr_dl_tti_request_body_t *dl_req = &gNB_mac->DL_req[CC_id].dl_tti_request_body;
|
||||
int pdu_index = gNB_mac->pdu_index[0]++;
|
||||
nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, pdu_index, type0_PDCCH_CSS_config, TBS, startSymbolIndex, nrOfSymbols);
|
||||
nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, pdu_index, type0_PDCCH_CSS_config, TBS, tda_info.startSymbolIndex, tda_info.nrOfSymbols);
|
||||
|
||||
const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs;
|
||||
nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[ntx_req];
|
||||
|
||||
@@ -411,8 +411,8 @@ bool allocate_dl_retransmission(module_id_t module_id,
|
||||
|
||||
/* Check first whether the old TDA can be reused
|
||||
* this helps allocate retransmission when TDA changes (e.g. new nrOfSymbols > old nrOfSymbols) */
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = get_dl_tdalist(dl_bwp, coresetid, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
NR_tda_info_t temp_tda = nr_get_pdsch_tda_info(pdsch_TimeDomainAllocationList, tda);
|
||||
NR_tda_info_t temp_tda = get_dl_tda_info(dl_bwp, sched_ctrl->search_space->searchSpaceType->present, tda,
|
||||
scc->dmrs_TypeA_Position, 1, NR_RNTI_C, coresetid, false);
|
||||
|
||||
bool reuse_old_tda = (retInfo->tda_info.startSymbolIndex == temp_tda.startSymbolIndex) && (retInfo->tda_info.nrOfSymbols <= temp_tda.nrOfSymbols);
|
||||
LOG_D(NR_MAC, "[UE %x] %s old TDA, %s number of layers\n",
|
||||
@@ -731,8 +731,9 @@ void pf_dl(module_id_t module_id,
|
||||
sched_pdsch->time_domain_allocation = get_dl_tda(mac, scc, slot);
|
||||
AssertFatal(sched_pdsch->time_domain_allocation>=0,"Unable to find PDSCH time domain allocation in list\n");
|
||||
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = get_dl_tdalist(dl_bwp, coresetid, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
sched_pdsch->tda_info = nr_get_pdsch_tda_info(pdsch_TimeDomainAllocationList, sched_pdsch->time_domain_allocation);
|
||||
sched_pdsch->tda_info = get_dl_tda_info(dl_bwp, sched_ctrl->search_space->searchSpaceType->present, sched_pdsch->time_domain_allocation,
|
||||
scc->dmrs_TypeA_Position, 1, NR_RNTI_C, coresetid, false);
|
||||
|
||||
NR_tda_info_t *tda_info = &sched_pdsch->tda_info;
|
||||
|
||||
const uint16_t slbitmap = SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
|
||||
|
||||
@@ -59,8 +59,9 @@ void nr_preprocessor_phytest(module_id_t module_id,
|
||||
const int CC_id = 0;
|
||||
|
||||
const int tda = get_dl_tda(RC.nrmac[module_id], scc, slot);
|
||||
NR_PDSCH_TimeDomainResourceAllocationList_t *tdalist = get_dl_tdalist(dl_bwp, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
NR_tda_info_t tda_info = nr_get_pdsch_tda_info(tdalist, tda);
|
||||
NR_tda_info_t tda_info = get_dl_tda_info(dl_bwp, sched_ctrl->search_space->searchSpaceType->present, tda,
|
||||
scc->dmrs_TypeA_Position, 1, NR_RNTI_C, sched_ctrl->coreset->controlResourceSetId, false);
|
||||
|
||||
sched_ctrl->sched_pdsch.tda_info = tda_info;
|
||||
sched_ctrl->sched_pdsch.time_domain_allocation = tda;
|
||||
|
||||
@@ -206,7 +207,7 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
||||
NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
|
||||
const int mu = ul_bwp->scs;
|
||||
|
||||
const struct NR_PUSCH_TimeDomainResourceAllocationList *tdaList = ul_bwp->tdaList;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = get_ul_tdalist(ul_bwp, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
const int temp_tda = get_ul_tda(nr_mac, scc, frame, slot);
|
||||
if (temp_tda < 0)
|
||||
return false;
|
||||
@@ -214,7 +215,7 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
||||
"time domain assignment %d >= %d\n",
|
||||
temp_tda,
|
||||
tdaList->list.count);
|
||||
int K2 = get_K2(ul_bwp->tdaList, temp_tda, mu);
|
||||
int K2 = get_K2(tdaList, temp_tda, mu);
|
||||
const int sched_frame = frame + (slot + K2 >= nr_slots_per_frame[mu]);
|
||||
const int sched_slot = (slot + K2) % nr_slots_per_frame[mu];
|
||||
const int tda = get_ul_tda(nr_mac, scc, sched_frame, sched_slot);
|
||||
@@ -241,7 +242,7 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
||||
else
|
||||
rbSize = target_ul_bw;
|
||||
|
||||
NR_tda_info_t tda_info = nr_get_pusch_tda_info(ul_bwp, tda);
|
||||
NR_tda_info_t tda_info = get_ul_tda_info(ul_bwp, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C, tda);
|
||||
sched_ctrl->sched_pusch.tda_info = tda_info;
|
||||
|
||||
uint16_t *vrb_map_UL =
|
||||
|
||||
@@ -563,28 +563,6 @@ bool nr_find_nb_rb(uint16_t Qm,
|
||||
return *tbs >= bytes && *nb_rb <= nb_rb_max;
|
||||
}
|
||||
|
||||
NR_tda_info_t nr_get_pdsch_tda_info(const NR_PDSCH_TimeDomainResourceAllocationList_t *tdaList, const int tda)
|
||||
{
|
||||
NR_tda_info_t tda_info = {0};
|
||||
AssertFatal(tda < tdaList->list.count, "time_domain_allocation %d>=%d\n", tda, tdaList->list.count);
|
||||
tda_info.mapping_type = tdaList->list.array[tda]->mappingType;
|
||||
const int startSymbolAndLength = tdaList->list.array[tda]->startSymbolAndLength;
|
||||
SLIV2SL(startSymbolAndLength, &tda_info.startSymbolIndex, &tda_info.nrOfSymbols);
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
NR_tda_info_t nr_get_pusch_tda_info(const NR_UE_UL_BWP_t *ul_bwp,
|
||||
const int tda) {
|
||||
|
||||
NR_tda_info_t tda_info = {0};
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = ul_bwp->tdaList;
|
||||
AssertFatal(tda < tdaList->list.count, "time_domain_allocation %d>=%d\n", tda, tdaList->list.count);
|
||||
tda_info.mapping_type = tdaList->list.array[tda]->mappingType;
|
||||
const int startSymbolAndLength = tdaList->list.array[tda]->startSymbolAndLength;
|
||||
SLIV2SL(startSymbolAndLength, &tda_info.startSymbolIndex, &tda_info.nrOfSymbols);
|
||||
return tda_info;
|
||||
}
|
||||
|
||||
NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
|
||||
const NR_UE_UL_BWP_t *ul_bwp,
|
||||
const NR_tda_info_t *tda_info,
|
||||
@@ -2176,14 +2154,14 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
|
||||
|
||||
// TDA lists
|
||||
if (DL_BWP->bwp_id>0)
|
||||
DL_BWP->tdaList = dl_bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
DL_BWP->tdaList_Common = dl_bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
else
|
||||
DL_BWP->tdaList = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
DL_BWP->tdaList_Common = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
|
||||
|
||||
if(UL_BWP->bwp_id>0)
|
||||
UL_BWP->tdaList = ul_bwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->tdaList_Common = ul_bwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
else
|
||||
UL_BWP->tdaList = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
UL_BWP->tdaList_Common = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||
|
||||
// setting generic parameters
|
||||
NR_BWP_t dl_genericParameters = (DL_BWP->bwp_id > 0 && dl_bwp) ?
|
||||
|
||||
@@ -274,11 +274,12 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
|
||||
continue;
|
||||
}
|
||||
|
||||
const int num_tda = current_BWP->tdaList->list.count;
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = get_ul_tdalist(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
const int num_tda = tdaList->list.count;
|
||||
int max_k2 = 0;
|
||||
// avoid last one in the list (for msg3)
|
||||
for (int i = 0; i < num_tda - 1; i++) {
|
||||
int k2 = get_K2(current_BWP->tdaList, i, current_BWP->scs);
|
||||
int k2 = get_K2(tdaList, i, current_BWP->scs);
|
||||
max_k2 = k2 > max_k2 ? k2 : max_k2;
|
||||
}
|
||||
|
||||
|
||||
@@ -1426,13 +1426,14 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
|
||||
const int CC_id = 0;
|
||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
|
||||
NR_sched_pusch_t *retInfo = &sched_ctrl->ul_harq_processes[harq_pid].sched_pusch;
|
||||
NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
|
||||
|
||||
int rbStart = 0; // wrt BWP start
|
||||
const uint16_t bwpSize = UE->current_UL_BWP.BWPSize;
|
||||
const uint16_t bwpSize = ul_bwp->BWPSize;
|
||||
const uint8_t nrOfLayers = retInfo->nrOfLayers;
|
||||
LOG_D(NR_MAC,"retInfo->time_domain_allocation = %d, tda = %d\n", retInfo->time_domain_allocation, tda);
|
||||
LOG_D(NR_MAC,"tbs %d\n",retInfo->tb_size);
|
||||
NR_tda_info_t tda_info = nr_get_pusch_tda_info(&UE->current_UL_BWP, tda);
|
||||
NR_tda_info_t tda_info = get_ul_tda_info(ul_bwp, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C, tda);
|
||||
bool reuse_old_tda = (retInfo->tda_info.startSymbolIndex == tda_info.startSymbolIndex) && (retInfo->tda_info.nrOfSymbols <= tda_info.nrOfSymbols);
|
||||
if (reuse_old_tda && nrOfLayers == retInfo->nrOfLayers) {
|
||||
/* Check the resource is enough for retransmission */
|
||||
@@ -1452,7 +1453,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
|
||||
LOG_D(NR_MAC, "%s(): retransmission keeping TDA %d and TBS %d\n", __func__, tda, retInfo->tb_size);
|
||||
} else {
|
||||
NR_pusch_dmrs_t dmrs_info = get_ul_dmrs_params(scc,
|
||||
&UE->current_UL_BWP,
|
||||
ul_bwp,
|
||||
&tda_info,
|
||||
nrOfLayers);
|
||||
/* the retransmission will use a different time domain allocation, check
|
||||
@@ -1668,7 +1669,7 @@ void pf_ul(module_id_t module_id,
|
||||
|
||||
sched_pusch->nrOfLayers = sched_ctrl->srs_feedback.ul_ri + 1;
|
||||
sched_pusch->time_domain_allocation = get_ul_tda(nrmac, scc, sched_pusch->frame, sched_pusch->slot);
|
||||
sched_pusch->tda_info = nr_get_pusch_tda_info(current_BWP, sched_pusch->time_domain_allocation);
|
||||
sched_pusch->tda_info = get_ul_tda_info(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C, sched_pusch->time_domain_allocation);
|
||||
sched_pusch->dmrs_info = get_ul_dmrs_params(scc,
|
||||
current_BWP,
|
||||
&sched_pusch->tda_info,
|
||||
@@ -1768,7 +1769,7 @@ void pf_ul(module_id_t module_id,
|
||||
|
||||
sched_pusch->nrOfLayers = sched_ctrl->srs_feedback.ul_ri + 1;
|
||||
sched_pusch->time_domain_allocation = get_ul_tda(nrmac, scc, sched_pusch->frame, sched_pusch->slot);
|
||||
sched_pusch->tda_info = nr_get_pusch_tda_info(current_BWP, sched_pusch->time_domain_allocation);
|
||||
sched_pusch->tda_info = get_ul_tda_info(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C, sched_pusch->time_domain_allocation);
|
||||
sched_pusch->dmrs_info = get_ul_dmrs_params(scc,
|
||||
current_BWP,
|
||||
&sched_pusch->tda_info,
|
||||
@@ -1870,13 +1871,14 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
||||
NR_UE_UL_BWP_t *current_BWP = &nr_mac->UE_info.list[0]->current_UL_BWP;
|
||||
int mu = current_BWP->scs;
|
||||
const int temp_tda = get_ul_tda(nr_mac, scc, frame, slot);
|
||||
int K2 = get_K2(current_BWP->tdaList, temp_tda, mu);
|
||||
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = get_ul_tdalist(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
|
||||
int K2 = get_K2(tdaList, temp_tda, mu);
|
||||
const int sched_frame = (frame + (slot + K2 >= nr_slots_per_frame[mu])) & 1023;
|
||||
const int sched_slot = (slot + K2) % nr_slots_per_frame[mu];
|
||||
const int tda = get_ul_tda(nr_mac, scc, sched_frame, sched_slot);
|
||||
if (tda < 0)
|
||||
return false;
|
||||
DevAssert(K2 == get_K2(current_BWP->tdaList, tda, mu));
|
||||
DevAssert(K2 == get_K2(tdaList, tda, mu));
|
||||
|
||||
if (!is_xlsch_in_slot(nr_mac->ulsch_slot_bitmap[sched_slot / 64], sched_slot))
|
||||
return false;
|
||||
@@ -1885,9 +1887,9 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
||||
sched_ctrl->sched_pusch.frame = sched_frame;
|
||||
UE_iterator(nr_mac->UE_info.list, UE2) {
|
||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE2->UE_sched_ctrl;
|
||||
AssertFatal(K2 == get_K2(current_BWP->tdaList, tda, mu),
|
||||
AssertFatal(K2 == get_K2(tdaList, tda, mu),
|
||||
"Different K2, %d(UE%d) != %ld(UE%04x)\n",
|
||||
K2, 0, get_K2(current_BWP->tdaList, tda, mu), UE2->rnti);
|
||||
K2, 0, get_K2(tdaList, tda, mu), UE2->rnti);
|
||||
sched_ctrl->sched_pusch.slot = sched_slot;
|
||||
sched_ctrl->sched_pusch.frame = sched_frame;
|
||||
}
|
||||
@@ -1895,13 +1897,12 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
||||
/* Change vrb_map_UL to rballoc_mask: check which symbols per RB (in
|
||||
* vrb_map_UL) overlap with the "default" tda and exclude those RBs.
|
||||
* Calculate largest contiguous RBs */
|
||||
uint16_t *vrb_map_UL =
|
||||
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
||||
uint16_t *vrb_map_UL = &RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
||||
|
||||
const uint16_t bwpSize = current_BWP->BWPSize;
|
||||
const uint16_t bwpStart = current_BWP->BWPStart;
|
||||
|
||||
const int startSymbolAndLength = current_BWP->tdaList->list.array[tda]->startSymbolAndLength;
|
||||
const int startSymbolAndLength = tdaList->list.array[tda]->startSymbolAndLength;
|
||||
int startSymbolIndex, nrOfSymbols;
|
||||
SLIV2SL(startSymbolAndLength, &startSymbolIndex, &nrOfSymbols);
|
||||
const uint16_t symb = SL_to_bitmap(startSymbolIndex, nrOfSymbols);
|
||||
|
||||
@@ -303,11 +303,6 @@ long get_K2(NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList,
|
||||
int time_domain_assignment,
|
||||
int mu);
|
||||
|
||||
NR_tda_info_t nr_get_pdsch_tda_info(const NR_PDSCH_TimeDomainResourceAllocationList_t *tdaList, const int tda);
|
||||
|
||||
NR_tda_info_t nr_get_pusch_tda_info(const NR_UE_UL_BWP_t *ul_bwp,
|
||||
const int tda);
|
||||
|
||||
NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
|
||||
const NR_UE_UL_BWP_t *ul_bwp,
|
||||
const NR_tda_info_t *tda_info,
|
||||
|
||||
@@ -334,12 +334,6 @@ typedef struct NR_sched_pucch {
|
||||
int start_symb;
|
||||
} NR_sched_pucch_t;
|
||||
|
||||
typedef struct NR_tda_info {
|
||||
mappingType_t mapping_type;
|
||||
int startSymbolIndex;
|
||||
int nrOfSymbols;
|
||||
} NR_tda_info_t;
|
||||
|
||||
typedef struct NR_pusch_dmrs {
|
||||
uint8_t N_PRB_DMRS;
|
||||
uint8_t num_dmrs_symb;
|
||||
|
||||
Reference in New Issue
Block a user