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
常顺宇
OpenXG-RAN
Commits
729182f5
Commit
729182f5
authored
Jan 08, 2021
by
Shweta Shrivastava
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use PTRS params from RRC at MAC; remove hardcoding
parent
61d3f346
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
103 additions
and
32 deletions
+103
-32
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+69
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+6
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+19
-21
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+9
-11
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
729182f5
...
...
@@ -2918,3 +2918,72 @@ bool set_dl_ptrs_values(NR_PTRS_DownlinkConfig_t *ptrs_config,
//printf("[MAC] PTRS is set K= %u L= %u\n", *K_ptrs,1<<*L_ptrs);
return
valid
;
}
/* extract UL PTRS values from RRC and validate it based upon 38.214 6.2.3 */
bool
set_ul_ptrs_values
(
NR_PTRS_UplinkConfig_t
*
ul_ptrs_config
,
uint16_t
rbSize
,
uint8_t
mcsIndex
,
uint8_t
mcsTable
,
uint8_t
*
K_ptrs
,
uint8_t
*
L_ptrs
,
uint8_t
*
reOffset
,
uint8_t
*
maxNumPorts
,
uint8_t
*
ulPower
,
uint8_t
NrOfSymbols
)
{
bool
valid
=
true
;
/* as defined in T 38.214 6.2.3 */
if
(
rbSize
<
3
)
{
valid
=
false
;
return
valid
;
}
/* Check for Frequency Density values */
if
(
ul_ptrs_config
->
transformPrecoderDisabled
->
frequencyDensity
->
list
.
count
<
2
)
{
/* Default value for K_PTRS = 2 as defined in T 38.214 6.2.3 */
*
K_ptrs
=
2
;
}
else
{
*
K_ptrs
=
get_K_ptrs
(
*
ul_ptrs_config
->
transformPrecoderDisabled
->
frequencyDensity
->
list
.
array
[
0
],
*
ul_ptrs_config
->
transformPrecoderDisabled
->
frequencyDensity
->
list
.
array
[
1
],
rbSize
);
}
/* Check for time Density values */
if
(
ul_ptrs_config
->
transformPrecoderDisabled
->
timeDensity
->
list
.
count
<
3
)
{
*
L_ptrs
=
0
;
}
else
{
*
L_ptrs
=
get_L_ptrs
(
*
ul_ptrs_config
->
transformPrecoderDisabled
->
timeDensity
->
list
.
array
[
0
],
*
ul_ptrs_config
->
transformPrecoderDisabled
->
timeDensity
->
list
.
array
[
1
],
*
ul_ptrs_config
->
transformPrecoderDisabled
->
timeDensity
->
list
.
array
[
2
],
mcsIndex
,
mcsTable
);
}
*
reOffset
=
*
ul_ptrs_config
->
transformPrecoderDisabled
->
resourceElementOffset
;
*
maxNumPorts
=
ul_ptrs_config
->
transformPrecoderDisabled
->
maxNrofPorts
;
*
ulPower
=
ul_ptrs_config
->
transformPrecoderDisabled
->
ptrs_Power
;
/* If either or both of the parameters PT-RS time density (LPT-RS) and PT-RS frequency density (KPT-RS), shown in Table
* 6.2.3.1-1 and Table 6.2.3.1-2, indicates that 'PT-RS not present', the UE shall assume that PT-RS is not present
*/
if
(
*
K_ptrs
==
2
||
*
K_ptrs
==
4
)
{
valid
=
true
;
}
else
{
valid
=
false
;
return
valid
;
}
if
(
*
L_ptrs
==
0
||
*
L_ptrs
==
1
||
*
L_ptrs
==
2
)
{
valid
=
true
;
}
else
{
valid
=
false
;
return
valid
;
}
/* PTRS is not present also :
* When the UE is receiving a PUSCH with allocation duration of 4 symbols and if LPT-RS is set to 4, the UE shall assume
* PT-RS is not transmitted
* When the UE is receiving a PUSCH with allocation duration of 2 symbols as defined in Clause 6.4.1.2.2 of [4, TS
* 38.211] and if LPT-RS is set to 2 or 4, the UE shall assume PT-RS is not transmitted.
*/
if
((
NrOfSymbols
==
4
&&
*
L_ptrs
==
2
)
||
((
NrOfSymbols
==
2
&&
*
L_ptrs
>
0
)))
{
valid
=
false
;
return
valid
;
}
return
valid
;
}
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
729182f5
...
...
@@ -185,4 +185,10 @@ bool set_dl_ptrs_values(NR_PTRS_DownlinkConfig_t *ptrs_config,
uint8_t
*
K_ptrs
,
uint8_t
*
L_ptrs
,
uint8_t
*
portIndex
,
uint8_t
*
nERatio
,
uint8_t
*
reOffset
,
uint8_t
NrOfSymbols
);
bool
set_ul_ptrs_values
(
NR_PTRS_UplinkConfig_t
*
ul_ptrs_config
,
uint16_t
rbSize
,
uint8_t
mcsIndex
,
uint8_t
mcsTable
,
uint8_t
*
K_ptrs
,
uint8_t
*
L_ptrs
,
uint8_t
*
reOffset
,
uint8_t
*
maxNumPorts
,
uint8_t
*
ulPower
,
uint8_t
NrOfSymbols
);
#endif
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
729182f5
...
...
@@ -1537,31 +1537,18 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
// program PUSCH with UL DCI parameters
nr_scheduled_response_t
scheduled_response
;
fapi_nr_tx_request_t
tx_req
;
nfapi_nr_ue_ptrs_ports_t
ptrs_ports_list
;
for
(
int
j
=
0
;
j
<
ul_config_req
->
number_pdus
;
j
++
)
{
fapi_nr_ul_config_request_pdu_t
*
ulcfg_pdu
=
&
ul_config_req
->
ul_config_list
[
j
];
if
(
ulcfg_pdu
->
pdu_type
==
FAPI_NR_UL_CONFIG_TYPE_PUSCH
)
{
// These should come from RRC config!!!
uint8_t
ptrs_mcs1
=
2
;
uint8_t
ptrs_mcs2
=
4
;
uint8_t
ptrs_mcs3
=
10
;
uint16_t
n_rb0
=
25
;
uint16_t
n_rb1
=
75
;
uint8_t
ptrs_time_density
=
get_L_ptrs
(
ptrs_mcs1
,
ptrs_mcs2
,
ptrs_mcs3
,
ulcfg_pdu
->
pusch_config_pdu
.
mcs_index
,
ulcfg_pdu
->
pusch_config_pdu
.
mcs_table
);
uint8_t
ptrs_freq_density
=
get_K_ptrs
(
n_rb0
,
n_rb1
,
ulcfg_pdu
->
pusch_config_pdu
.
rb_size
);
uint16_t
l_prime_mask
=
get_l_prime
(
ulcfg_pdu
->
pusch_config_pdu
.
nr_of_symbols
,
typeB
,
pusch_dmrs_pos0
,
pusch_len1
);
uint16_t
ul_dmrs_symb_pos
=
l_prime_mask
<<
ulcfg_pdu
->
pusch_config_pdu
.
start_symbol_index
;
uint8_t
dmrs_config_type
=
0
;
uint16_t
number_dmrs_symbols
=
0
;
// PTRS ports configuration
// TbD: ptrs_dmrs_port and ptrs_port_index are not initialised!
ptrs_ports_list
.
ptrs_re_offset
=
0
;
// Num PRB Overhead from PUSCH-ServingCellConfig
if
(
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
xOverhead
==
NULL
)
N_PRB_oh
=
0
;
...
...
@@ -1573,13 +1560,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
ulcfg_pdu
->
pusch_config_pdu
.
num_dmrs_cdm_grps_no_data
=
1
;
ulcfg_pdu
->
pusch_config_pdu
.
nrOfLayers
=
1
;
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
new_data_indicator
=
0
;
ulcfg_pdu
->
pusch_config_pdu
.
pdu_bit_map
=
PUSCH_PDU_BITMAP_PUSCH_DATA
;
ulcfg_pdu
->
pusch_config_pdu
.
pusch_ptrs
.
ptrs_time_density
=
ptrs_time_density
;
ulcfg_pdu
->
pusch_config_pdu
.
pusch_ptrs
.
ptrs_freq_density
=
ptrs_freq_density
;
ulcfg_pdu
->
pusch_config_pdu
.
pusch_ptrs
.
ptrs_ports_list
=
&
ptrs_ports_list
;
//ulcfg_pdu->pusch_config_pdu.target_code_rate = nr_get_code_rate_ul(ulcfg_pdu->pusch_config_pdu.mcs_index, ulcfg_pdu->pusch_config_pdu.mcs_table);
//ulcfg_pdu->pusch_config_pdu.qam_mod_order = nr_get_Qm_ul(ulcfg_pdu->pusch_config_pdu.mcs_index, ulcfg_pdu->pusch_config_pdu.mcs_table);
ulcfg_pdu
->
pusch_config_pdu
.
pdu_bit_map
|=
PUSCH_PDU_BITMAP_PUSCH_DATA
;
if
(
1
<<
ulcfg_pdu
->
pusch_config_pdu
.
pusch_ptrs
.
ptrs_time_density
>=
ulcfg_pdu
->
pusch_config_pdu
.
nr_of_symbols
)
{
ulcfg_pdu
->
pusch_config_pdu
.
pdu_bit_map
&=
~
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// disable PUSCH PTRS
}
...
...
@@ -3624,6 +3606,22 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
// A value of "1" indicates UL-SCH shall be transmitted on the PUSCH and
// a value of "0" indicates UL-SCH shall not be transmitted on the PUSCH
if
(
mac
->
ULbwp
[
0
]
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
->
phaseTrackingRS
!=
NULL
)
{
if
(
pusch_config_pdu_0_1
->
transform_precoding
==
transform_precoder_disabled
)
{
nfapi_nr_ue_ptrs_ports_t
ptrs_ports_list
;
pusch_config_pdu_0_1
->
pusch_ptrs
.
ptrs_ports_list
=
&
ptrs_ports_list
;
valid_ptrs_setup
=
set_ul_ptrs_values
(
mac
->
ULbwp
[
0
]
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
->
phaseTrackingRS
->
choice
.
setup
,
pusch_config_pdu_0_1
->
rb_size
,
pusch_config_pdu_0_1
->
mcs_index
,
pusch_config_pdu_0_1
->
mcs_table
,
&
pusch_config_pdu_0_1
->
pusch_ptrs
.
ptrs_freq_density
,
&
pusch_config_pdu_0_1
->
pusch_ptrs
.
ptrs_time_density
,
&
pusch_config_pdu_0_1
->
pusch_ptrs
.
ptrs_ports_list
->
ptrs_re_offset
,
&
pusch_config_pdu_0_1
->
pusch_ptrs
.
num_ptrs_ports
,
&
pusch_config_pdu_0_1
->
pusch_ptrs
.
ul_ptrs_power
,
pusch_config_pdu_0_1
->
nr_of_symbols
);
if
(
valid_ptrs_setup
==
true
)
{
pusch_config_pdu_0_1
->
pdu_bit_map
|=
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
}
//LOG_I(MAC, "UL PTRS values: PTRS time den: %d, PTRS freq den: %d\n", pusch_config_pdu_0_1->pusch_ptrs.ptrs_freq_density, pusch_config_pdu_0_1->pusch_ptrs.ptrs_time_density);
}
}
ul_config
->
slot
=
slot_tx
;
ul_config
->
sfn
=
frame_tx
;
ul_config
->
number_pdus
=
ul_config
->
number_pdus
+
1
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
729182f5
...
...
@@ -486,6 +486,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
int
bwp_id
=
1
;
int
mu
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
int
UE_id
=
0
;
bool
valid_ptrs_setup
=
false
;
NR_UE_info_t
*
UE_info
=
&
RC
.
nrmac
[
Mod_idP
]
->
UE_info
;
AssertFatal
(
UE_info
->
active
[
UE_id
],
"Cannot find UE_id %d is not active
\n
"
,
UE_id
);
...
...
@@ -693,18 +694,15 @@ void schedule_fapi_ul_pdu(int Mod_idP,
// ------- PTRS -------
// --------------------
if
(
NR_DMRS_UplinkConfig
->
phaseTrackingRS
!=
NULL
)
{
// TODO to be fixed from RRC config
uint8_t
ptrs_mcs1
=
2
;
// higher layer parameter in PTRS-UplinkConfig
uint8_t
ptrs_mcs2
=
4
;
// higher layer parameter in PTRS-UplinkConfig
uint8_t
ptrs_mcs3
=
10
;
// higher layer parameter in PTRS-UplinkConfig
uint16_t
n_rb0
=
25
;
// higher layer parameter in PTRS-UplinkConfig
uint16_t
n_rb1
=
75
;
// higher layer parameter in PTRS-UplinkConfig
pusch_pdu
->
pusch_ptrs
.
ptrs_time_density
=
get_L_ptrs
(
ptrs_mcs1
,
ptrs_mcs2
,
ptrs_mcs3
,
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
);
pusch_pdu
->
pusch_ptrs
.
ptrs_freq_density
=
get_K_ptrs
(
n_rb0
,
n_rb1
,
pusch_pdu
->
rb_size
);
pusch_pdu
->
pusch_ptrs
.
ptrs_ports_list
=
(
nfapi_nr_ptrs_ports_t
*
)
malloc
(
2
*
sizeof
(
nfapi_nr_ptrs_ports_t
));
pusch_pdu
->
pusch_ptrs
.
ptrs_ports_list
[
0
].
ptrs_re_offset
=
0
;
pusch_pdu
->
pdu_bit_map
|=
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// enable PUSCH PTRS
valid_ptrs_setup
=
set_ul_ptrs_values
(
NR_DMRS_UplinkConfig
->
phaseTrackingRS
->
choice
.
setup
,
pusch_pdu
->
rb_size
,
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
,
&
pusch_pdu
->
pusch_ptrs
.
ptrs_freq_density
,
&
pusch_pdu
->
pusch_ptrs
.
ptrs_time_density
,
&
pusch_pdu
->
pusch_ptrs
.
ptrs_ports_list
->
ptrs_re_offset
,
&
pusch_pdu
->
pusch_ptrs
.
num_ptrs_ports
,
&
pusch_pdu
->
pusch_ptrs
.
ul_ptrs_power
,
pusch_pdu
->
nr_of_symbols
);
if
(
valid_ptrs_setup
==
true
)
{
pusch_pdu
->
pdu_bit_map
|=
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// enable PUSCH PTRS
}
}
else
{
pusch_pdu
->
pdu_bit_map
&=
~
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// disable PUSCH PTRS
...
...
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