Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
1340e00f
Commit
1340e00f
authored
4 years ago
by
Francesco Mani
Committed by
Shweta Shrivastava
4 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mcs table for pusch from rrc config
parent
8676ceea
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
91 additions
and
37 deletions
+91
-37
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+34
-2
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+9
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+48
-34
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
1340e00f
...
...
@@ -1603,11 +1603,9 @@ uint16_t Table_51312[28][2] = {{2,120},{2,193},{2,308},{2,449},{2,602},{4,378},{
uint16_t
Table_51313
[
29
][
2
]
=
{{
2
,
30
},{
2
,
40
},{
2
,
50
},{
2
,
64
},{
2
,
78
},{
2
,
99
},{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
4
,
340
},
{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},{
6
,
438
},{
6
,
466
},{
6
,
517
},{
6
,
567
},{
6
,
616
},{
6
,
666
},
{
6
,
719
},
{
6
,
772
}};
//Table 6.1.4.1-1 of 38.214 TODO fix for tp-pi2BPSK
uint16_t
Table_61411
[
28
][
2
]
=
{{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
2
,
679
},{
4
,
340
},{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},
{
4
,
658
},{
6
,
466
},{
6
,
517
},{
6
,
567
},{
6
,
616
},{
6
,
666
},{
6
,
719
},{
6
,
772
},{
6
,
822
},{
6
,
873
},
{
6
,
910
},
{
6
,
948
}};
//Table 6.1.4.1-2 of 38.214 TODO fix for tp-pi2BPSK
uint16_t
Table_61412
[
28
][
2
]
=
{{
2
,
30
},{
2
,
40
},{
2
,
50
},{
2
,
64
},{
2
,
78
},{
2
,
99
},{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
2
,
679
},
{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},{
4
,
658
},{
4
,
699
},{
4
,
772
},{
6
,
567
},{
6
,
616
},{
6
,
666
},
{
6
,
772
}};
...
...
@@ -2471,6 +2469,40 @@ int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,i
return
(
-
1
);
}
uint8_t
get_pusch_mcs_table
(
long
*
mcs_Table
,
int
is_tp
,
int
dci_format
,
int
rnti_type
,
int
target_ss
,
bool
config_grant
)
{
// implementing 6.1.4.1 in 38.214
if
(
mcs_Table
!=
NULL
)
{
if
(
config_grant
||
(
rnti_type
==
NR_RNTI_CS
))
{
if
(
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam256
)
return
1
;
else
return
(
2
+
(
is_tp
<<
1
));
}
else
{
if
((
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam256
)
&&
(
dci_format
==
NR_UL_DCI_FORMAT_0_1
)
&&
((
rnti_type
==
NR_RNTI_C
)
||
(
rnti_type
==
NR_RNTI_SP_CSI
)))
return
1
;
// TODO take into account UE configuration
if
((
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam64LowSE
)
&&
(
target_ss
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
)
&&
((
rnti_type
==
NR_RNTI_C
)
||
(
rnti_type
==
NR_RNTI_SP_CSI
)))
return
(
2
+
(
is_tp
<<
1
));
if
(
rnti_type
==
NR_RNTI_MCS_C
)
return
(
2
+
(
is_tp
<<
1
));
AssertFatal
(
1
==
0
,
"Invalid configuration to set MCS table"
);
}
}
else
return
(
0
+
(
is_tp
*
3
));
}
int
binomial
(
int
n
,
int
k
)
{
int
c
=
1
,
i
;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
1340e00f
...
...
@@ -60,7 +60,8 @@ typedef enum {
NR_RNTI_INT
,
NR_RNTI_TPC_PUSCH
,
NR_RNTI_TPC_PUCCH
,
NR_RNTI_TPC_SRS
NR_RNTI_TPC_SRS
,
NR_RNTI_MCS_C
,
}
nr_rnti_type_t
;
uint16_t
config_bandwidth
(
int
mu
,
int
nb_rb
,
int
nr_band
);
...
...
@@ -100,6 +101,13 @@ int get_nr_prach_info_from_index(uint8_t index,
uint8_t
*
N_t_slot
,
uint8_t
*
N_dur
);
uint8_t
get_pusch_mcs_table
(
long
*
mcs_Table
,
int
is_tp
,
int
dci_format
,
int
rnti_type
,
int
target_ss
,
bool
config_grant
);
uint8_t
compute_nr_root_seq
(
NR_RACH_ConfigCommon_t
*
rach_config
,
uint8_t
nb_preambles
,
uint8_t
unpaired
);
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
1340e00f
...
...
@@ -862,6 +862,36 @@ void schedule_fapi_ul_pdu(int Mod_idP,
LOG_D
(
MAC
,
"Scheduling UE specific PUSCH
\n
"
);
//UL_tti_req = &nr_mac->UL_tti_req[CC_id];
int
dci_formats
[
2
];
int
rnti_types
[
2
];
NR_SearchSpace_t
*
ss
;
int
target_ss
=
NR_SearchSpace__searchSpaceType_PR_ue_Specific
;
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
!=
NULL
,
"searchPsacesToAddModList is null
\n
"
);
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
>
0
,
"searchPsacesToAddModList is empty
\n
"
);
int
found
=
0
;
for
(
int
i
=
0
;
i
<
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
;
i
++
)
{
ss
=
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
array
[
i
];
AssertFatal
(
ss
->
controlResourceSetId
!=
NULL
,
"ss->controlResourceSetId is null
\n
"
);
AssertFatal
(
ss
->
searchSpaceType
!=
NULL
,
"ss->searchSpaceType is null
\n
"
);
if
(
ss
->
searchSpaceType
->
present
==
target_ss
)
{
found
=
1
;
break
;
}
}
AssertFatal
(
found
==
1
,
"Couldn't find an adequate searchspace
\n
"
);
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
)
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_1
;
else
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_0
;
rnti_types
[
0
]
=
NR_RNTI_C
;
//Resource Allocation in time domain
int
startSymbolAndLength
=
0
;
int
StartSymbolIndex
,
NrOfSymbols
,
mapping_type
;
...
...
@@ -881,12 +911,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
pusch_pdu
->
bwp_start
=
NRRIV2PRBOFFSET
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
pusch_pdu
->
subcarrier_spacing
=
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
pusch_pdu
->
cyclic_prefix
=
0
;
//pusch information always include
//this informantion seems to be redundant. with hthe mcs_index and the modulation table, the mod_order and target_code_rate can be determined.
pusch_pdu
->
mcs_index
=
9
;
pusch_pdu
->
mcs_table
=
0
;
//0: notqam256 [TS38.214, table 5.1.3.1-1] - corresponds to nr_target_code_rate_table1 in PHY
pusch_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
)
;
pusch_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
)
;
if
(
pusch_Config
->
transformPrecoder
==
NULL
)
{
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
==
NULL
)
pusch_pdu
->
transform_precoding
=
1
;
...
...
@@ -900,6 +925,23 @@ void schedule_fapi_ul_pdu(int Mod_idP,
else
pusch_pdu
->
data_scrambling_id
=
*
scc
->
physCellId
;
pusch_pdu
->
mcs_index
=
9
;
if
(
pusch_pdu
->
transform_precoding
)
pusch_pdu
->
mcs_table
=
get_pusch_mcs_table
(
pusch_Config
->
mcs_Table
,
0
,
dci_formats
[
0
],
rnti_types
[
0
],
target_ss
,
false
);
else
pusch_pdu
->
mcs_table
=
get_pusch_mcs_table
(
pusch_Config
->
mcs_TableTransformPrecoder
,
1
,
dci_formats
[
0
],
rnti_types
[
0
],
target_ss
,
false
);
pusch_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
);
pusch_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
);
if
(
pusch_Config
->
tp_pi2BPSK
!=
NULL
)
{
if
(((
pusch_pdu
->
mcs_table
==
3
)
&&
(
pusch_pdu
->
mcs_index
<
2
))
||
((
pusch_pdu
->
mcs_table
==
4
)
&&
(
pusch_pdu
->
mcs_index
<
6
)))
{
pusch_pdu
->
target_code_rate
=
pusch_pdu
->
target_code_rate
>>
1
;
pusch_pdu
->
qam_mod_order
=
pusch_pdu
->
qam_mod_order
<<
1
;
}
}
pusch_pdu
->
nrOfLayers
=
1
;
//Pusch Allocation in frequency domain [TS38.214, sec 6.1.2.2]
...
...
@@ -1053,35 +1095,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
ul_dci_request_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
UL_dci_req
->
numPdus
+=
1
;
int
dci_formats
[
2
];
int
rnti_types
[
2
];
NR_SearchSpace_t
*
ss
;
int
target_ss
=
NR_SearchSpace__searchSpaceType_PR_ue_Specific
;
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
!=
NULL
,
"searchPsacesToAddModList is null
\n
"
);
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
>
0
,
"searchPsacesToAddModList is empty
\n
"
);
int
found
=
0
;
for
(
int
i
=
0
;
i
<
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
;
i
++
)
{
ss
=
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
array
[
i
];
AssertFatal
(
ss
->
controlResourceSetId
!=
NULL
,
"ss->controlResourceSetId is null
\n
"
);
AssertFatal
(
ss
->
searchSpaceType
!=
NULL
,
"ss->searchSpaceType is null
\n
"
);
if
(
ss
->
searchSpaceType
->
present
==
target_ss
)
{
found
=
1
;
break
;
}
}
AssertFatal
(
found
==
1
,
"Couldn't find an adequate searchspace
\n
"
);
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
)
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_1
;
else
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_0
;
rnti_types
[
0
]
=
NR_RNTI_C
;
LOG_D
(
MAC
,
"Configuring ULDCI/PDCCH in %d.%d
\n
"
,
frameP
,
slotP
);
int
ret
=
nr_configure_pdcch
(
nr_mac
,
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment