Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
6af5303b
Commit
6af5303b
authored
Oct 18, 2020
by
Shweta Shrivastava
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed hard-coded PUSCH slot at UE; use dynamic grant
parent
3c2b742f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
164 additions
and
126 deletions
+164
-126
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+2
-2
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+157
-121
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+4
-2
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+1
-1
No files found.
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
6af5303b
...
@@ -119,8 +119,8 @@ uint32_t ue_get_SR(module_id_t module_idP, int CC_id, frame_t frameP,
...
@@ -119,8 +119,8 @@ uint32_t ue_get_SR(module_id_t module_idP, int CC_id, frame_t frameP,
int8_t
nr_ue_get_SR
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
uint8_t
eNB_id
,
uint16_t
rnti
,
sub_frame_t
subframe
);
int8_t
nr_ue_get_SR
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
uint8_t
eNB_id
,
uint16_t
rnti
,
sub_frame_t
subframe
);
int8_t
nr_ue_process_dci
(
module_id_t
module_id
,
int
cc_id
,
uint8_t
gNB_index
,
dci_pdu_rel15_t
*
dci
,
uint16_t
rnti
,
uint32_t
dci_format
);
int8_t
nr_ue_process_dci
(
module_id_t
module_id
,
int
cc_id
,
uint8_t
gNB_index
,
frame_t
frame
,
int
slot
,
dci_pdu_rel15_t
*
dci
,
uint16_t
rnti
,
uint32_t
dci_format
);
int
nr_ue_process_dci_indication_pdu
(
module_id_t
module_id
,
int
cc_id
,
int
gNB_index
,
fapi_nr_dci_indication_pdu_t
*
dci
);
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
);
uint32_t
get_ssb_frame
(
uint32_t
test
);
uint32_t
get_ssb_frame
(
uint32_t
test
);
uint32_t
get_ssb_slot
(
uint32_t
ssb_index
);
uint32_t
get_ssb_slot
(
uint32_t
ssb_index
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
6af5303b
...
@@ -775,7 +775,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
...
@@ -775,7 +775,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
}
}
}
else
if
(
ul_info
)
{
}
else
if
(
ul_info
)
{
if
(
get_softmodem_params
()
->
phy_test
&&
ul_info
->
slot_tx
==
8
)
{
// ULSCH is handled only in phy-test mode (consistently with OAI gNB)
// ULSCH is handled only in phy-test mode (consistently with OAI gNB)
if
(
get_softmodem_params
()
->
phy_test
)
{
uint8_t
nb_dmrs_re_per_rb
;
uint8_t
nb_dmrs_re_per_rb
;
uint8_t
ulsch_input_buffer
[
MAX_ULSCH_PAYLOAD_BYTES
];
uint8_t
ulsch_input_buffer
[
MAX_ULSCH_PAYLOAD_BYTES
];
...
@@ -794,101 +795,107 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
...
@@ -794,101 +795,107 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
uint8_t
access_mode
=
SCHEDULED_ACCESS
;
uint8_t
access_mode
=
SCHEDULED_ACCESS
;
// program PUSCH with UL DCI parameters
fapi_nr_ul_config_request_t
*
ul_config_req
=
&
mac
->
ul_config_request
;
nr_dcireq_t
dcireq
;
nr_scheduled_response_t
scheduled_response
;
// Schedule ULSCH only if the frame and slot are as indicated in ul_config_req.
fapi_nr_tx_request_t
tx_req
;
// These values were set based on the values of slot in which UL DCI was received and K2.
fapi_nr_tx_request_body_t
tx_req_body
;
if
(
ul_info
->
frame_tx
==
ul_config_req
->
sfn
&&
ul_info
->
slot_tx
==
ul_config_req
->
slot
)
{
fapi_nr_ul_config_request_t
*
ul_config
=
&
dcireq
.
ul_config_req
;
nfapi_nr_ue_ptrs_ports_t
ptrs_ports_list
;
// program PUSCH with UL DCI parameters
nr_dcireq_t
dcireq
;
fapi_nr_ul_config_request_pdu_t
*
ulcfg_pdu
=
&
mac
->
ul_config_request
.
ul_config_list
[
0
];
nr_scheduled_response_t
scheduled_response
;
fapi_nr_tx_request_t
tx_req
;
uint16_t
rnti
=
ulcfg_pdu
->
pusch_config_pdu
.
rnti
;
fapi_nr_tx_request_body_t
tx_req_body
;
uint32_t
rb_size
=
ulcfg_pdu
->
pusch_config_pdu
.
rb_size
;
fapi_nr_ul_config_request_t
*
ul_config
=
&
dcireq
.
ul_config_req
;
uint32_t
rb_start
=
ulcfg_pdu
->
pusch_config_pdu
.
rb_start
;
nfapi_nr_ue_ptrs_ports_t
ptrs_ports_list
;
uint8_t
nr_of_symbols
=
ulcfg_pdu
->
pusch_config_pdu
.
nr_of_symbols
;
uint8_t
start_symbol_index
=
ulcfg_pdu
->
pusch_config_pdu
.
start_symbol_index
;
fapi_nr_ul_config_request_pdu_t
*
ulcfg_pdu
=
&
mac
->
ul_config_request
.
ul_config_list
[
0
];
uint8_t
nrOfLayers
=
1
;
uint8_t
mcs_index
=
ulcfg_pdu
->
pusch_config_pdu
.
mcs_index
;
uint16_t
rnti
=
ulcfg_pdu
->
pusch_config_pdu
.
rnti
;
uint8_t
mcs_table
=
ulcfg_pdu
->
pusch_config_pdu
.
mcs_table
;
uint32_t
rb_size
=
ulcfg_pdu
->
pusch_config_pdu
.
rb_size
;
uint8_t
harq_process_id
=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
harq_process_id
;
uint32_t
rb_start
=
ulcfg_pdu
->
pusch_config_pdu
.
rb_start
;
uint8_t
rv_index
=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
rv_index
;
uint8_t
nr_of_symbols
=
ulcfg_pdu
->
pusch_config_pdu
.
nr_of_symbols
;
uint16_t
l_prime_mask
=
get_l_prime
(
nr_of_symbols
,
typeB
,
pusch_dmrs_pos0
,
pusch_len1
);
uint8_t
start_symbol_index
=
ulcfg_pdu
->
pusch_config_pdu
.
start_symbol_index
;
uint8_t
dmrs_config_type
=
0
;
uint8_t
nrOfLayers
=
1
;
uint16_t
pdu_bit_map
=
PUSCH_PDU_BITMAP_PUSCH_DATA
;
uint8_t
mcs_index
=
ulcfg_pdu
->
pusch_config_pdu
.
mcs_index
;
// These should come from RRC config!!!
uint8_t
mcs_table
=
ulcfg_pdu
->
pusch_config_pdu
.
mcs_table
;
uint8_t
ptrs_mcs1
=
2
;
uint8_t
harq_process_id
=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
harq_process_id
;
uint8_t
ptrs_mcs2
=
4
;
uint8_t
rv_index
=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
rv_index
;
uint8_t
ptrs_mcs3
=
10
;
uint16_t
l_prime_mask
=
get_l_prime
(
nr_of_symbols
,
typeB
,
pusch_dmrs_pos0
,
pusch_len1
);
uint16_t
n_rb0
=
25
;
uint8_t
dmrs_config_type
=
0
;
uint16_t
n_rb1
=
75
;
uint16_t
pdu_bit_map
=
PUSCH_PDU_BITMAP_PUSCH_DATA
;
uint8_t
ptrs_time_density
=
get_L_ptrs
(
ptrs_mcs1
,
ptrs_mcs2
,
ptrs_mcs3
,
mcs_index
,
mcs_table
);
// These should come from RRC config!!!
uint8_t
ptrs_freq_density
=
get_K_ptrs
(
n_rb0
,
n_rb1
,
rb_size
);
uint8_t
ptrs_mcs1
=
2
;
uint16_t
number_dmrs_symbols
=
0
;
uint8_t
ptrs_mcs2
=
4
;
uint16_t
ul_dmrs_symb_pos
=
l_prime_mask
<<
start_symbol_index
;
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
,
mcs_index
,
mcs_table
);
uint8_t
ptrs_freq_density
=
get_K_ptrs
(
n_rb0
,
n_rb1
,
rb_size
);
uint16_t
number_dmrs_symbols
=
0
;
uint16_t
ul_dmrs_symb_pos
=
l_prime_mask
<<
start_symbol_index
;
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
LOG_I
(
MAC
,
" UL config params
\n
rnti: %x
\n
rb_size: %d
\n
"
,
LOG_I
(
MAC
,
" UL config params
\n
rnti: %x
\n
rb_size: %d
\n
"
,
rnti
,
rb_size
);
rnti
,
rb_size
);
LOG_I
(
MAC
,
"rb_start: %x
\n
nr_of_symbols: %d
\n
start_symbol_index: %d
\n
nrOfLayers: %d
\n
mcs_index: %d
\n
\
LOG_I
(
MAC
,
"rb_start: %x
\n
nr_of_symbols: %d
\n
start_symbol_index: %d
\n
nrOfLayers: %d
\n
mcs_index: %d
\n
\
mcs_table: %d
\n
harq_process_id: %d
\n
ndi: %d
\n
num_cb
: %d
\n
rv_index: %d
\n
"
,
mcs_table: %d
\n
harq_process_id
: %d
\n
rv_index: %d
\n
"
,
rb_start
,
nr_of_symbols
,
start_symbol_index
,
nrOfLayers
,
mcs_index
,
rb_start
,
nr_of_symbols
,
start_symbol_index
,
nrOfLayers
,
mcs_index
,
mcs_table
,
harq_process_id
,
ndi
,
num_cb
,
rv_index
);
mcs_table
,
harq_process_id
,
rv_index
);
#endif
#endif
// PTRS ports configuration
// PTRS ports configuration
// TbD: ptrs_dmrs_port and ptrs_port_index are not initialised!
// TbD: ptrs_dmrs_port and ptrs_port_index are not initialised!
ptrs_ports_list
.
ptrs_re_offset
=
0
;
ptrs_ports_list
.
ptrs_re_offset
=
0
;
// Num PRB Overhead from PUSCH-ServingCellConfig
// Num PRB Overhead from PUSCH-ServingCellConfig
if
(
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
xOverhead
==
NULL
)
if
(
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
xOverhead
==
NULL
)
N_PRB_oh
=
0
;
N_PRB_oh
=
0
;
else
else
N_PRB_oh
=
*
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
xOverhead
;
N_PRB_oh
=
*
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
xOverhead
;
ul_config
->
slot
=
ul_info
->
slot_tx
;
ul_config
->
slot
=
ul_info
->
slot_tx
;
ul_config
->
number_pdus
=
1
;
ul_config
->
number_pdus
=
1
;
ul_config
->
ul_config_list
[
0
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PUSCH
;
ul_config
->
ul_config_list
[
0
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PUSCH
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rnti
=
rnti
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rnti
=
rnti
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rb_size
=
rb_size
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rb_size
=
rb_size
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rb_start
=
rb_start
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
rb_start
=
rb_start
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
nr_of_symbols
=
nr_of_symbols
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
nr_of_symbols
=
nr_of_symbols
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
start_symbol_index
=
start_symbol_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
start_symbol_index
=
start_symbol_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
ul_dmrs_symb_pos
=
ul_dmrs_symb_pos
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
ul_dmrs_symb_pos
=
ul_dmrs_symb_pos
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
dmrs_config_type
=
dmrs_config_type
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
dmrs_config_type
=
dmrs_config_type
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
mcs_index
=
mcs_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
mcs_index
=
mcs_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
mcs_table
=
mcs_table
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
mcs_table
=
mcs_table
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
num_dmrs_cdm_grps_no_data
=
1
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
num_dmrs_cdm_grps_no_data
=
1
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
new_data_indicator
=
0
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
new_data_indicator
=
0
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
rv_index
=
rv_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
rv_index
=
rv_index
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
nrOfLayers
=
nrOfLayers
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
nrOfLayers
=
nrOfLayers
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
harq_process_id
=
harq_process_id
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
harq_process_id
=
harq_process_id
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pdu_bit_map
=
pdu_bit_map
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pdu_bit_map
=
pdu_bit_map
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_time_density
=
ptrs_time_density
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_time_density
=
ptrs_time_density
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_freq_density
=
ptrs_freq_density
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_freq_density
=
ptrs_freq_density
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_ports_list
=
&
ptrs_ports_list
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_ptrs
.
ptrs_ports_list
=
&
ptrs_ports_list
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
target_code_rate
=
nr_get_code_rate_ul
(
mcs_index
,
mcs_table
);
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
target_code_rate
=
nr_get_code_rate_ul
(
mcs_index
,
mcs_table
);
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
qam_mod_order
=
nr_get_Qm_ul
(
mcs_index
,
mcs_table
);
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
qam_mod_order
=
nr_get_Qm_ul
(
mcs_index
,
mcs_table
);
if
(
1
<<
ptrs_time_density
>=
nr_of_symbols
)
{
if
(
1
<<
ptrs_time_density
>=
nr_of_symbols
)
{
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pdu_bit_map
&=
~
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// disable PUSCH PTRS
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pdu_bit_map
&=
~
PUSCH_PDU_BITMAP_PUSCH_PTRS
;
// disable PUSCH PTRS
}
}
get_num_re_dmrs
(
&
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
,
get_num_re_dmrs
(
&
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
,
&
nb_dmrs_re_per_rb
,
&
nb_dmrs_re_per_rb
,
&
number_dmrs_symbols
);
&
number_dmrs_symbols
);
TBS
=
nr_compute_tbs
(
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
qam_mod_order
,
TBS
=
nr_compute_tbs
(
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
qam_mod_order
,
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
target_code_rate
,
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
target_code_rate
,
rb_size
,
rb_size
,
nr_of_symbols
,
nr_of_symbols
,
nb_dmrs_re_per_rb
*
number_dmrs_symbols
,
nb_dmrs_re_per_rb
*
number_dmrs_symbols
,
N_PRB_oh
,
N_PRB_oh
,
0
,
0
,
nrOfLayers
);
nrOfLayers
);
TBS_bytes
=
TBS
/
8
;
TBS_bytes
=
TBS
/
8
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
tb_size
=
TBS_bytes
;
ul_config
->
ul_config_list
[
0
].
pusch_config_pdu
.
pusch_data
.
tb_size
=
TBS_bytes
;
if
(
IS_SOFTMODEM_NOS1
){
if
(
IS_SOFTMODEM_NOS1
){
// Getting IP traffic to be transmitted
// Getting IP traffic to be transmitted
...
@@ -930,31 +937,33 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
...
@@ -930,31 +937,33 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
#endif
#endif
dcireq
.
module_id
=
mod_id
;
dcireq
.
module_id
=
mod_id
;
dcireq
.
gNB_index
=
gNB_index
;
dcireq
.
gNB_index
=
gNB_index
;
dcireq
.
cc_id
=
cc_id
;
dcireq
.
cc_id
=
cc_id
;
dcireq
.
frame
=
rx_frame
;
dcireq
.
frame
=
rx_frame
;
dcireq
.
slot
=
rx_slot
;
dcireq
.
slot
=
rx_slot
;
// Config UL TX PDU
// Config UL TX PDU
tx_req
.
slot
=
slot_tx
;
tx_req
.
slot
=
slot_tx
;
tx_req
.
sfn
=
frame_tx
;
tx_req
.
sfn
=
frame_tx
;
// tx_req->tx_config // TbD
// tx_req->tx_config // TbD
tx_req
.
number_of_pdus
=
1
;
tx_req
.
number_of_pdus
=
1
;
tx_req_body
.
pdu_length
=
TBS_bytes
;
tx_req_body
.
pdu_length
=
TBS_bytes
;
tx_req_body
.
pdu_index
=
0
;
tx_req_body
.
pdu_index
=
0
;
tx_req_body
.
pdu
=
ulsch_input_buffer
;
tx_req_body
.
pdu
=
ulsch_input_buffer
;
tx_req
.
tx_request_body
=
&
tx_req_body
;
tx_req
.
tx_request_body
=
&
tx_req_body
;
fill_scheduled_response
(
&
scheduled_response
,
NULL
,
ul_config
,
&
tx_req
,
mod_id
,
cc_id
,
rx_frame
,
rx_slot
);
fill_scheduled_response
(
&
scheduled_response
,
NULL
,
ul_config
,
&
tx_req
,
mod_id
,
cc_id
,
rx_frame
,
rx_slot
);
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
){
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
){
mac
->
if_module
->
scheduled_response
(
&
scheduled_response
);
mac
->
if_module
->
scheduled_response
(
&
scheduled_response
);
}
}
// TODO: expand
// Note: Contention resolution is currently not active
if
(
mac
->
RA_contention_resolution_timer_active
==
1
)
ue_contention_resolution
(
mod_id
,
gNB_index
,
cc_id
,
ul_info
->
frame_tx
);
// TODO: expand
}
// Note: Contention resolution is currently not active
if
(
mac
->
RA_contention_resolution_timer_active
==
1
)
ue_contention_resolution
(
mod_id
,
gNB_index
,
cc_id
,
ul_info
->
frame_tx
);
}
else
if
(
get_softmodem_params
()
->
do_ra
){
}
else
if
(
get_softmodem_params
()
->
do_ra
){
...
@@ -2430,7 +2439,7 @@ int8_t nr_ue_process_dci_time_dom_resource_assignment(NR_UE_MAC_INST_t *mac,
...
@@ -2430,7 +2439,7 @@ int8_t nr_ue_process_dci_time_dom_resource_assignment(NR_UE_MAC_INST_t *mac,
return
0
;
return
0
;
}
}
//////////////
//////////////
int
nr_ue_process_dci_indication_pdu
(
module_id_t
module_id
,
int
cc_id
,
int
gNB_index
,
fapi_nr_dci_indication_pdu_t
*
dci
)
{
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
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
...
@@ -2438,10 +2447,10 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in
...
@@ -2438,10 +2447,10 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in
dci
->
rnti
,
dci
->
dci_format
,
dci
->
n_CCE
,
dci
->
payloadSize
,
*
(
unsigned
long
long
*
)
dci
->
payloadBits
);
dci
->
rnti
,
dci
->
dci_format
,
dci
->
n_CCE
,
dci
->
payloadSize
,
*
(
unsigned
long
long
*
)
dci
->
payloadBits
);
int
dci_format
=
nr_extract_dci_info
(
mac
,
dci
->
dci_format
,
dci
->
payloadSize
,
dci
->
rnti
,(
uint64_t
*
)
dci
->
payloadBits
,
def_dci_pdu_rel15
);
int
dci_format
=
nr_extract_dci_info
(
mac
,
dci
->
dci_format
,
dci
->
payloadSize
,
dci
->
rnti
,(
uint64_t
*
)
dci
->
payloadBits
,
def_dci_pdu_rel15
);
return
(
nr_ue_process_dci
(
module_id
,
cc_id
,
gNB_index
,
def_dci_pdu_rel15
,
dci
->
rnti
,
dci_format
));
return
(
nr_ue_process_dci
(
module_id
,
cc_id
,
gNB_index
,
frame
,
slot
,
def_dci_pdu_rel15
,
dci
->
rnti
,
dci_format
));
}
}
int8_t
nr_ue_process_dci
(
module_id_t
module_id
,
int
cc_id
,
uint8_t
gNB_index
,
dci_pdu_rel15_t
*
dci
,
uint16_t
rnti
,
uint32_t
dci_format
){
int8_t
nr_ue_process_dci
(
module_id_t
module_id
,
int
cc_id
,
uint8_t
gNB_index
,
frame_t
frame
,
int
slot
,
dci_pdu_rel15_t
*
dci
,
uint16_t
rnti
,
uint32_t
dci_format
){
int
bwp_id
=
1
;
int
bwp_id
=
1
;
...
@@ -2477,7 +2486,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
...
@@ -2477,7 +2486,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
* 49 PADDING_NR_DCI: (Note 2) If DCI format 0_0 is monitored in common search space
* 49 PADDING_NR_DCI: (Note 2) If DCI format 0_0 is monitored in common search space
* 50 SUL_IND_0_0:
* 50 SUL_IND_0_0:
*/
*/
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PUSCH
;
// It's redundant to process PUSCH pdu here in the Rx path. This is done
// in the Tx path in nr_ue_scheduler(). Hence removing here.
//ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PUSCH;
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
.
rnti
=
rnti
;
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
.
rnti
=
rnti
;
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu_0_0
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu_0_0
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
/* IDENTIFIER_DCI_FORMATS */
/* IDENTIFIER_DCI_FORMATS */
...
@@ -2515,7 +2526,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
...
@@ -2515,7 +2526,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
}
}
/* SUL_IND_0_0 */
// To be implemented, FIXME!!!
/* SUL_IND_0_0 */
// To be implemented, FIXME!!!
ul_config
->
number_pdus
=
ul_config
->
number_pdus
+
1
;
// Removing since it's redundant to process PUSCH PDU in RX path!!
//ul_config->number_pdus = ul_config->number_pdus + 1;
break
;
break
;
case
NR_UL_DCI_FORMAT_0_1
:
case
NR_UL_DCI_FORMAT_0_1
:
...
@@ -2547,7 +2559,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
...
@@ -2547,7 +2559,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
* 48 UL_SCH_IND
* 48 UL_SCH_IND
* 49 PADDING_NR_DCI: (Note 2) If DCI format 0_0 is monitored in common search space
* 49 PADDING_NR_DCI: (Note 2) If DCI format 0_0 is monitored in common search space
*/
*/
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PUSCH
;
// It's redundant to process PUSCH pdu here in the Rx path. This is done
// in the Tx path in nr_ue_scheduler(). Hence removing here.
//ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PUSCH;
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
.
rnti
=
rnti
;
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
.
rnti
=
rnti
;
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu_0_1
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu_0_1
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
/* IDENTIFIER_DCI_FORMATS */
/* IDENTIFIER_DCI_FORMATS */
...
@@ -2841,7 +2855,29 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
...
@@ -2841,7 +2855,29 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
// A value of "1" indicates UL-SCH shall be transmitted on the PUSCH and
// 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
// a value of "0" indicates UL-SCH shall not be transmitted on the PUSCH
ul_config
->
number_pdus
=
ul_config
->
number_pdus
+
1
;
// Calculate the slot in which ULSCH should be scheduled. This is current slot + K2,
// where K2 is the offset between the slot in which UL DCI is received and the slot
// in which ULSCH should be scheduled. K2 is configured in RRC configuration.
// Get K2 from RRC configuration
NR_PUSCH_TimeDomainResourceAllocationList_t
*
pusch_TimeDomainAllocationList
=
NULL
;
if
(
pusch_config
->
pusch_TimeDomainAllocationList
)
{
pusch_TimeDomainAllocationList
=
pusch_config
->
pusch_TimeDomainAllocationList
->
choice
.
setup
;
}
else
if
(
mac
->
ULbwp
[
0
]
->
bwp_Common
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
)
{
pusch_TimeDomainAllocationList
=
mac
->
ULbwp
[
0
]
->
bwp_Common
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
;
}
long
k2
=
*
pusch_TimeDomainAllocationList
->
list
.
array
[
dci
->
time_domain_assignment
.
val
]
->
k2
;
// Get the numerology to calculate the Tx frame and slot
int
mu
=
mac
->
ULbwp
[
0
]
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
// Calculate the slot and frame
ul_config
->
slot
=
(
slot
+
k2
)
%
nr_slots_per_frame
[
mu
];
ul_config
->
sfn
=
((
slot
+
k2
)
%
nr_slots_per_frame
[
mu
]
>
nr_slots_per_frame
[
mu
])
?
(
frame
+
1
)
%
1024
:
frame
;
// Removing since it's redundant to process PUSCH PDU in RX path!!
//ul_config->number_pdus = ul_config->number_pdus + 1;
LOG_I
(
MAC
,
"nr_ue_process_dci(): Calculated frame and slot for pusch Tx: %d.%d
\n
"
,
ul_config
->
sfn
,
ul_config
->
slot
);
break
;
break
;
case
NR_DL_DCI_FORMAT_1_0
:
case
NR_DL_DCI_FORMAT_1_0
:
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
6af5303b
...
@@ -64,10 +64,10 @@ int handle_bcch_dlsch(module_id_t module_id, int cc_id, unsigned int gNB_index,
...
@@ -64,10 +64,10 @@ int handle_bcch_dlsch(module_id_t module_id, int cc_id, unsigned int gNB_index,
return
0
;
return
0
;
}
}
// L2 Abstraction Layer
// L2 Abstraction Layer
int
handle_dci
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
fapi_nr_dci_indication_pdu_t
*
dci
){
int
handle_dci
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
f
rame_t
frame
,
int
slot
,
f
api_nr_dci_indication_pdu_t
*
dci
){
//printf("handle_dci: rnti %x,dci_type %d\n",rnti,dci_type);
//printf("handle_dci: rnti %x,dci_type %d\n",rnti,dci_type);
return
nr_ue_process_dci_indication_pdu
(
module_id
,
cc_id
,
gNB_index
,
dci
);
return
nr_ue_process_dci_indication_pdu
(
module_id
,
cc_id
,
gNB_index
,
frame
,
slot
,
dci
);
}
}
// L2 Abstraction Layer
// L2 Abstraction Layer
...
@@ -150,6 +150,8 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
...
@@ -150,6 +150,8 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
int8_t
ret
=
handle_dci
(
dl_info
->
module_id
,
int8_t
ret
=
handle_dci
(
dl_info
->
module_id
,
dl_info
->
cc_id
,
dl_info
->
cc_id
,
dl_info
->
gNB_index
,
dl_info
->
gNB_index
,
dl_info
->
frame
,
dl_info
->
slot
,
dl_info
->
dci_ind
->
dci_list
+
i
);
dl_info
->
dci_ind
->
dci_list
+
i
);
ret_mask
|=
(
ret
<<
FAPI_NR_DCI_IND
);
ret_mask
|=
(
ret
<<
FAPI_NR_DCI_IND
);
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
View file @
6af5303b
...
@@ -224,7 +224,7 @@ int handle_bcch_bch(module_id_t module_id, int cc_id, unsigned int gNB_index, ui
...
@@ -224,7 +224,7 @@ int handle_bcch_bch(module_id_t module_id, int cc_id, unsigned int gNB_index, ui
\param pduP pointer to pdu*/
\param pduP pointer to pdu*/
int
handle_bcch_dlsch
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
uint32_t
sibs_mask
,
uint8_t
*
pduP
,
uint32_t
pdu_len
);
int
handle_bcch_dlsch
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
uint32_t
sibs_mask
,
uint8_t
*
pduP
,
uint32_t
pdu_len
);
int
handle_dci
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
fapi_nr_dci_indication_pdu_t
*
dci
);
int
handle_dci
(
module_id_t
module_id
,
int
cc_id
,
unsigned
int
gNB_index
,
f
rame_t
frame
,
int
slot
,
f
api_nr_dci_indication_pdu_t
*
dci
);
#endif
#endif
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