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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG-RAN
Commits
aa023210
Commit
aa023210
authored
Nov 16, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UE_acknack' into integration_2021_wk46
parents
32ecb88a
facf3aa6
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
105 additions
and
75 deletions
+105
-75
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
+1
-0
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
+2
-1
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+5
-4
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+2
-2
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+8
-4
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+4
-3
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
+1
-0
openair1/SCHED_NR_UE/harq_nr.c
openair1/SCHED_NR_UE/harq_nr.c
+6
-7
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-2
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-1
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+2
-0
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+1
-1
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+0
-3
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+16
-28
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+1
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+20
-12
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+20
-1
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+2
-0
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+2
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+4
-1
No files found.
ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
View file @
aa023210
...
...
@@ -24,6 +24,7 @@ gNBs =
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime_pdsch
=
6
;
servingCellConfigCommon
= (
{
...
...
ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
View file @
aa023210
...
...
@@ -35,6 +35,7 @@ gNBs =
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime_pdsch
=
6
;
ul_prbblacklist
=
"51,52,53,54"
pdcch_ConfigSIB1
= (
...
...
@@ -143,7 +144,7 @@ gNBs =
initialULBWPk2_1
=
6
;
# used for mixed slot
initialULBWPmappingType_1
=
1
;
initialULBWPstartSymbolAndLength_1
=
52
;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_1
=
38
;
# this is SS=10 L=3
initialULBWPk2_2
=
7
;
# used for Msg.3 during RA
initialULBWPmappingType_2
=
1
;
...
...
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
View file @
aa023210
...
...
@@ -21,9 +21,10 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime_pdsch
=
6
;
servingCellConfigCommon
= (
{
...
...
@@ -124,7 +125,7 @@ gNBs =
initialULBWPk2_1
=
6
;
# used for mixed slot
initialULBWPmappingType_1
=
1
;
initialULBWPstartSymbolAndLength_1
=
69
;
# this is SS=10 L=2
initialULBWPstartSymbolAndLength_1
=
38
;
# this is SS=10 L=3
initialULBWPk2_2
=
7
;
# used for Msg.3 during RA
initialULBWPmappingType_2
=
1
;
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.c
View file @
aa023210
...
...
@@ -135,8 +135,8 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
dci_pdu
->
AggregationLevel
,
0
,
NULL
);
polar_encoder_fast
((
uint64_t
*
)
dci_pdu
->
Payload
,
(
void
*
)
encoder_output
,
n_RNTI
,
1
,
currentPtr
);
#if DEBUG_CHANNEL_CODING
printf
(
"polar rnti %x,length %d, L %d
\n
"
,
n_RNTI
,
dci_pdu
->
PayloadSizeBits
,
dci_pdu
->
AggregationLevel
);
#if
def
DEBUG_CHANNEL_CODING
printf
(
"polar rnti %x,length %d, L %d
\n
"
,
n_RNTI
,
dci_pdu
->
PayloadSizeBits
,
pdcch_pdu_rel15
->
dci_pdu
->
AggregationLevel
);
printf
(
"DCI PDU: [0]->0x%lx
\t
[1]->0x%lx
\n
"
,
((
uint64_t
*
)
dci_pdu
->
Payload
)[
0
],
((
uint64_t
*
)
dci_pdu
->
Payload
)[
1
]);
printf
(
"Encoded Payload (length:%d dwords):
\n
"
,
encoded_length
>>
5
);
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
aa023210
...
...
@@ -430,8 +430,10 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
uci_pdu
->
harq
->
harq_confidence_level
=
no_conf
?
1
:
0
;
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
1
);
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
index
&
0x01
;
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d with confidence level (0 is good, 1 is bad) %d xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos %d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
10
*
log10
((
double
)
sigenergy
),
gNB
->
ulsch_stats
[
0
].
sync_pos
);
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d with confidence level %d (0 is good, 1 is bad) xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos %d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
10
*
log10
((
double
)
sigenergy
),
gNB
->
ulsch_stats
[
0
].
sync_pos
);
if
(
pucch_pdu
->
sr_flag
==
1
)
{
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
->
sr_indication
=
(
index
>
1
)
?
1
:
0
;
...
...
@@ -447,8 +449,10 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
uci_pdu
->
harq
->
harq_list
=
(
nfapi_nr_harq_t
*
)
malloc
(
2
);
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
=
index
&
0x01
;
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
=
(
index
>>
1
)
&
0x01
;
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d and %d with confidence level (0 is good, 1 is bad) %d, xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos %d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
gNB
->
ulsch_stats
[
0
].
sync_pos
);
LOG_D
(
PHY
,
"[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d and %d with confidence level %d (0 is good, 1 is bad), xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos %d
\n
"
,
frame
,
slot
,
uci_pdu
->
harq
->
harq_list
[
1
].
harq_value
,
uci_pdu
->
harq
->
harq_list
[
0
].
harq_value
,
uci_pdu
->
harq
->
harq_confidence_level
,
xrtmag_dBtimes10
,
xrtmag_next_dBtimes10
,
max_n0
,
uci_stats
->
pucch0_n00
,
uci_stats
->
pucch0_n01
,
uci_stats
->
pucch0_thres
,
cqi
,
SNRtimes10
,
gNB
->
ulsch_stats
[
0
].
sync_pos
);
if
(
pucch_pdu
->
sr_flag
==
1
)
{
uci_pdu
->
sr
=
calloc
(
1
,
sizeof
(
*
uci_pdu
->
sr
));
uci_pdu
->
sr
->
sr_indication
=
(
index
>
3
)
?
1
:
0
;
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
aa023210
...
...
@@ -105,7 +105,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
dlsch0
->
active
=
1
;
dlsch0
->
rnti
=
dl_config
->
dl_config_list
[
i
].
dlsch_config_pdu
.
rnti
;
LOG_D
(
PHY
,
"
current_harq_pid = %d
\n
"
,
current_harq_pid
);
LOG_D
(
PHY
,
"
slot %d current_harq_pid = %d
\n
"
,
slot
,
current_harq_pid
);
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
dlsch0
->
harq_processes
[
current_harq_pid
];
if
(
dlsch0_harq
){
...
...
@@ -131,9 +131,10 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
dlsch0_harq
->
mcs_table
=
dlsch_config_pdu
->
mcs_table
;
downlink_harq_process
(
dlsch0_harq
,
dlsch0
->
current_harq_pid
,
dlsch_config_pdu
->
ndi
,
dlsch_config_pdu
->
rv
,
dlsch0
->
rnti_type
);
if
(
dlsch0_harq
->
status
!=
ACTIVE
)
{
// dlsch0_harq->status not ACTIVE
may be due to false retransmission. Reset the
//
following flag to skip PDSCH procedures in that case.
// dlsch0_harq->status not ACTIVE
due to false retransmission
//
Reset the following flag to skip PDSCH procedures in that case and retrasmit harq status
dlsch0
->
active
=
0
;
update_harq_status
(
module_id
,
dlsch0
->
current_harq_pid
,
dlsch0_harq
->
ack
);
}
/* PTRS */
dlsch0_harq
->
PTRSFreqDensity
=
dlsch_config_pdu
->
PTRSFreqDensity
;
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
View file @
aa023210
...
...
@@ -43,5 +43,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response);
\param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/
int8_t
nr_ue_phy_config_request
(
nr_phy_config_t
*
phy_config
);
void
update_harq_status
(
module_id_t
module_id
,
uint8_t
harq_pid
,
uint8_t
ack_nack
);
#endif
openair1/SCHED_NR_UE/harq_nr.c
View file @
aa023210
...
...
@@ -331,7 +331,6 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq)
void
downlink_harq_process
(
NR_DL_UE_HARQ_t
*
dl_harq
,
int
harq_pid
,
int
ndi
,
int
rv
,
uint8_t
rnti_type
)
{
if
(
rnti_type
==
_SI_RNTI_
||
rnti_type
==
_P_RNTI_
||
rnti_type
==
_RA_RNTI_
)
{
...
...
@@ -351,38 +350,38 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int
break
;
case
1
:
dl_harq
->
round
=
2
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
break
;
case
2
:
dl_harq
->
round
=
1
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
break
;
case
3
:
dl_harq
->
round
=
3
;
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
0
;
if
(
dl_harq
->
DCINdi
!=
ndi
)
{
LOG_E
(
PHY
,
"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception
\n
"
,
rv
);
dl_harq
->
status
=
ACTIVE
;
dl_harq
->
first_rx
=
1
;
dl_harq
->
DCINdi
=
ndi
;
}
else
if
(
dl_harq
->
ack
)
else
if
(
dl_harq
->
ack
==
1
)
dl_harq
->
status
=
SCH_IDLE
;
break
;
default:
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
aa023210
...
...
@@ -1887,11 +1887,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA
,
VCD_FUNCTION_OUT
);
}
// do procedures for C-RNTI
if
(
ue
->
dlsch
[
proc
->
thread_id
][
gNB_id
][
0
]
->
active
==
1
)
{
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
\n
"
,
nr_slot_rx
);
LOG_D
(
PHY
,
"DLSCH data reception at nr_slot_rx: %d
\n
"
,
nr_slot_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC
,
VCD_FUNCTION_IN
);
start_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
aa023210
...
...
@@ -768,7 +768,7 @@ int main(int argc, char **argv)
prepare_scd
(
scd
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
6
,
0
,
0
,
0
);
/* RRC parameter validation for secondaryCellGroup */
fix_scd
(
scd
);
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
aa023210
...
...
@@ -713,7 +713,7 @@ int main(int argc, char **argv)
prepare_scd
(
scd
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
);
fill_default_secondaryCellGroup
(
scc
,
scd
,
secondaryCellGroup
,
0
,
1
,
n_tx
,
0
,
0
,
0
,
0
);
// xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
...
...
openair2/GNB_APP/gnb_config.c
View file @
aa023210
...
...
@@ -1110,6 +1110,8 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
printf
(
"minTXRXTIMEpdsch %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
minRXTXTIMEpdsch
=
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
sib1_tda
=
*
GNBParamList
.
paramarray
[
i
][
GNB_SIB1_TDA_IDX
].
iptr
;
printf
(
"minTXRXTIMEpdsch %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
minRXTXTIMEpdsch
=
*
GNBParamList
.
paramarray
[
i
][
GNB_MINRXTXTIMEPDSCH_IDX
].
iptr
;
printf
(
"Do CSI-RS %d
\n
"
,
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
);
NRRRC_CONFIGURATION_REQ
(
msg_p
).
do_CSIRS
=
*
GNBParamList
.
paramarray
[
i
][
GNB_DO_CSIRS_IDX
].
iptr
;
NRRRC_CONFIGURATION_REQ
(
msg_p
).
scc
=
scc
;
...
...
openair2/GNB_APP/gnb_paramdef.h
View file @
aa023210
...
...
@@ -149,7 +149,7 @@ typedef enum {
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIMEPDSCH, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"",
TYPE_STRING,
0} \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"",
TYPE_STRING,
0} \
}
#define GNB_GNB_ID_IDX 0
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
aa023210
...
...
@@ -299,9 +299,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
frame_t
frame
,
int
slot
);
void
update_harq_status
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
);
uint8_t
get_downlink_ack
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frame
,
int
slot
,
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
aa023210
...
...
@@ -1232,14 +1232,17 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
uint8_t
feedback_ti
=
ubwpd
->
pucch_Config
->
choice
.
setup
->
dl_DataToUL_ACK
->
list
.
array
[
dci
->
pdsch_to_harq_feedback_timing_indicator
.
val
][
0
];
// set the harq status at MAC for feedback
set_harq_status
(
mac
,
dci
->
pucch_resource_indicator
,
dci
->
harq_pid
,
dlsch_config_pdu_1_1
->
accumulated_delta_PUCCH
,
feedback_ti
,
dci
->
dai
[
0
].
val
,
dci_ind
->
n_CCE
,
dci_ind
->
N_CCE
,
0
,
frame
,
slot
);
AssertFatal
(
feedback_ti
>=
DURATION_RX_TO_TX
,
"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d)
\n
"
,
feedback_ti
,
DURATION_RX_TO_TX
);
// set the harq status at MAC for feedback
set_harq_status
(
mac
,
dci
->
pucch_resource_indicator
,
dci
->
harq_pid
,
dlsch_config_pdu_1_1
->
accumulated_delta_PUCCH
,
feedback_ti
,
dci
->
dai
[
0
].
val
,
dci_ind
->
n_CCE
,
dci_ind
->
N_CCE
,
0
,
frame
,
slot
);
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_DLSCH
;
LOG_D
(
MAC
,
"(nr_ue_procedures.c) pdu_type=%d
\n\n
"
,
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
);
...
...
@@ -1331,25 +1334,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
}
void
update_harq_status
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
dl_info
->
module_id
);
uint8_t
harq_pid
=
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
harq_pid
;
NR_UE_HARQ_STATUS_t
*
current_harq
=
&
mac
->
dl_harq_info
[
harq_pid
];
if
(
current_harq
->
active
)
{
current_harq
->
ack
=
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
;
current_harq
->
ack_received
=
true
;
LOG_D
(
PHY
,
"Updating harq_status for harq_id %d,ack/nak %d
\n
"
,
harq_pid
,
current_harq
->
ack
);
}
else
{
//shouldn't get here
LOG_E
(
MAC
,
"Trying to process acknack for an inactive harq process (%d)
\n
"
,
harq_pid
);
}
}
void
nr_ue_configure_pucch
(
NR_UE_MAC_INST_t
*
mac
,
int
slot
,
uint16_t
rnti
,
...
...
@@ -2123,7 +2107,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
uint32_t
V_temp
=
0
;
uint32_t
V_temp2
=
0
;
int
O_ACK
=
0
;
in
t
o_ACK
=
0
;
uint8_
t
o_ACK
=
0
;
int
O_bit_number_cw0
=
0
;
int
O_bit_number_cw1
=
0
;
...
...
@@ -2151,6 +2135,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
}
o_ACK
=
o_ACK
|
(
ack_data
[
0
][
m
]
<<
O_bit_number_cw0
);
LOG_D
(
MAC
,
"m %d bit number %d o_ACK %d
\n
"
,
m
,
O_bit_number_cw0
,
o_ACK
);
}
if
(
V_temp2
<
V_temp
)
{
...
...
@@ -2169,8 +2154,11 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
return
(
0
);
}
reverse_n_bits
(
&
o_ACK
,
number_harq_feedback
);
pucch
->
ack_payload
=
o_ACK
;
LOG_D
(
MAC
,
"frame %d slot %d pucch acknack payload %d
\n
"
,
frame
,
slot
,
o_ACK
);
return
(
number_harq_feedback
);
}
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
aa023210
...
...
@@ -2152,7 +2152,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in
if
(
N_UCI
>
0
)
{
pucch
->
resource_set_id
=
find_pucch_resource_set
(
mac
,
N_UCI
);
LOG_D
(
NR_MAC
,
"%d.%d configure pucch, O_SR %d, O_ACK %d, O_CSI %d
\n
"
,
frameP
,
slotP
,
O_SR
,
O_ACK
,
O_CSI
);
pucch
->
resource_set_id
=
find_pucch_resource_set
(
mac
,
O_ACK
+
O_CSI
);
select_pucch_resource
(
mac
,
pucch
);
fapi_nr_ul_config_request_t
*
ul_config
=
get_ul_config_request
(
mac
,
slotP
);
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
aa023210
...
...
@@ -373,7 +373,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
schedule_nr_prach
(
module_idP
,
f
,
s
);
}
// This schedule SR
// This schedule SR
nr_sr_reporting
(
module_idP
,
frame
,
slot
);
// Schedule CSI-RS transmission
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
aa023210
...
...
@@ -753,7 +753,7 @@ void pf_dl(module_id_t module_id,
/* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH
* allocation after CCE alloc fail would be more complex) */
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
if
(
alloc
<
0
)
{
LOG_D
(
NR_MAC
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
aa023210
...
...
@@ -348,7 +348,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
__func__
,
UE_id
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
const
int
alloc
=
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
slot
,
-
1
,
0
);
if
(
alloc
<
0
)
{
LOG_D
(
MAC
,
"%s(): could not find PUCCH for UE %d/%04x@%d.%d
\n
"
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
aa023210
...
...
@@ -2193,6 +2193,7 @@ void get_pdsch_to_harq_feedback(int Mod_idP,
}
void
nr_csirs_scheduling
(
int
Mod_idP
,
frame_t
frame
,
sub_frame_t
slot
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
aa023210
...
...
@@ -1095,6 +1095,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
DevAssert
(
harq
->
is_waiting
);
const
int8_t
pid
=
sched_ctrl
->
feedback_dl_harq
.
head
;
remove_front_nr_list
(
&
sched_ctrl
->
feedback_dl_harq
);
LOG_D
(
NR_MAC
,
"bit %d pid %d ack/nack %d
\n
"
,
harq_bit
,
pid
,
harq_value
);
handle_dl_harq
(
mod_id
,
UE_id
,
pid
,
harq_value
==
1
&&
harq_confidence
==
0
);
if
(
harq_confidence
==
1
)
UE_info
->
mac_stats
[
UE_id
].
pucch0_DTX
++
;
}
...
...
@@ -1183,7 +1184,7 @@ int nr_acknack_scheduling(int mod_id,
const
int
nr_mix_slots
=
tdd
->
nrofDownlinkSymbols
!=
0
||
tdd
->
nrofUplinkSymbols
!=
0
;
const
int
nr_slots_period
=
tdd
->
nrofDownlinkSlots
+
tdd
->
nrofUplinkSlots
+
nr_mix_slots
;
const
int
first_ul_slot_tdd
=
tdd
->
nrofDownlinkSlots
+
nr_slots_period
*
(
slot
/
nr_slots_period
);
const
int
first_ul_slot_period
=
first_ul_slot_tdd
%
nr_slots_period
;
const
int
first_ul_slot_period
=
tdd
->
nrofDownlinkSlots
;
const
int
CC_id
=
0
;
NR_sched_pucch_t
*
csi_pucch
;
...
...
@@ -1232,11 +1233,11 @@ int nr_acknack_scheduling(int mod_id,
&&
!
csi_pucch
->
simultaneous_harqcsi
)
{
nr_fill_nfapi_pucch
(
mod_id
,
frame
,
slot
,
csi_pucch
,
UE_id
);
memset
(
csi_pucch
,
0
,
sizeof
(
*
csi_pucch
));
pucch
->
frame
=
s
==
n_slots_frame
-
1
?
(
f
+
1
)
%
1024
:
f
;
if
(((
s
+
1
)
%
nr_slots_period
)
==
0
)
pucch
->
ul_slot
=
(
s
+
1
+
first_ul_slot_period
)
%
n_slots_frame
;
pucch
->
frame
=
pucch
->
ul_slot
==
n_slots_frame
-
1
?
(
pucch
->
frame
+
1
)
%
1024
:
pucch
->
frame
;
if
(((
pucch
->
ul_slot
+
1
)
%
nr_slots_period
)
==
0
)
pucch
->
ul_slot
=
(
pucch
->
ul_slot
+
1
+
first_ul_slot_period
)
%
n_slots_frame
;
else
pucch
->
ul_slot
=
(
s
+
1
)
%
n_slots_frame
;
pucch
->
ul_slot
=
(
pucch
->
ul_slot
+
1
)
%
n_slots_frame
;
}
}
...
...
@@ -1260,7 +1261,6 @@ int nr_acknack_scheduling(int mod_id,
int
max_fb_time
=
0
;
get_pdsch_to_harq_feedback
(
mod_id
,
UE_id
,
bwp_Id
,
ss_type
,
&
max_fb_time
,
pdsch_to_harq_feedback
);
int
max_absslot
=
frame
*
n_slots_frame
+
slot
+
max_fb_time
;
LOG_D
(
NR_MAC
,
"pucch_acknak 1b. DL %d.%d, UL_ACK %d.%d, DAI_C %d
\n
"
,
frame
,
slot
,
pucch
->
frame
,
pucch
->
ul_slot
,
pucch
->
dai_c
);
/* there is a HARQ. Check whether we can use it for this ACKNACK */
...
...
@@ -1269,7 +1269,10 @@ int nr_acknack_scheduling(int mod_id,
// Find the right timing_indicator value.
int
i
=
0
;
while
(
i
<
8
)
{
if
(
pdsch_to_harq_feedback
[
i
]
==
pucch
->
ul_slot
-
slot
)
int
diff
=
pucch
->
ul_slot
-
slot
;
if
(
diff
<
0
)
diff
+=
n_slots_frame
;
if
(
pdsch_to_harq_feedback
[
i
]
==
diff
)
break
;
++
i
;
}
...
...
@@ -1299,8 +1302,10 @@ int nr_acknack_scheduling(int mod_id,
LOG_D
(
NR_MAC
,
"pucch_acknak : %d.%d DAI = 0, looking for new pucch occasion
\n
"
,
frame
,
slot
);
/* we need to find a new PUCCH occasion */
/*Inizialization of timing information*/
if
(
pucch
->
frame
==
0
&&
pucch
->
ul_slot
==
0
)
{
/*(Re)Inizialization of timing information*/
if
((
pucch
->
frame
==
0
&&
pucch
->
ul_slot
==
0
)
||
((
pucch
->
frame
*
n_slots_frame
+
pucch
->
ul_slot
)
<
(
frame
*
n_slots_frame
+
slot
)))
{
AssertFatal
(
pucch
->
sr_flag
+
pucch
->
dai_c
==
0
,
"expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d
\n
"
,
UE_id
,
frame
,
slot
,
pucch
->
sr_flag
,
pucch
->
dai_c
,
pucch
->
frame
,
pucch
->
ul_slot
);
...
...
@@ -1310,13 +1315,16 @@ int nr_acknack_scheduling(int mod_id,
// Find the right timing_indicator value.
int
ind_found
=
-
1
;
// while we are within the feedback limits
and it has not been
while
((
pucch
->
frame
*
n_slots_frame
+
pucch
->
ul_slot
)
<=
max_absslot
)
{
// while we are within the feedback limits
while
((
n_slots_frame
+
pucch
->
ul_slot
-
slot
)
%
n_slots_frame
<=
max_fb_time
)
{
int
i
=
0
;
while
(
i
<
8
)
{
LOG_D
(
NR_MAC
,
"pdsch_to_harq_feedback[%d] = %d (pucch->ul_slot %d - slot %d)
\n
"
,
i
,
pdsch_to_harq_feedback
[
i
],
pucch
->
ul_slot
,
slot
);
if
(
pdsch_to_harq_feedback
[
i
]
==
pucch
->
ul_slot
-
slot
)
{
int
diff
=
pucch
->
ul_slot
-
slot
;
if
(
diff
<
0
)
diff
+=
n_slots_frame
;
if
(
pdsch_to_harq_feedback
[
i
]
==
diff
)
{
ind_found
=
i
;
break
;
}
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
aa023210
...
...
@@ -81,13 +81,32 @@ int handle_dci(module_id_t module_id, int cc_id, unsigned int gNB_index, frame_t
// Note: sdu should always be processed because data and timing advance updates are transmitted by the UE
int8_t
handle_dlsch
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
){
update_harq_status
(
dl_info
,
pdu_id
);
update_harq_status
(
dl_info
->
module_id
,
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
harq_pid
,
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
);
if
(
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdsch_pdu
.
ack_nack
)
nr_ue_send_sdu
(
dl_info
,
ul_time_alignment
,
pdu_id
);
return
0
;
}
void
update_harq_status
(
module_id_t
module_id
,
uint8_t
harq_pid
,
uint8_t
ack_nack
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
NR_UE_HARQ_STATUS_t
*
current_harq
=
&
mac
->
dl_harq_info
[
harq_pid
];
if
(
current_harq
->
active
)
{
current_harq
->
ack
=
ack_nack
;
current_harq
->
ack_received
=
true
;
LOG_D
(
PHY
,
"Updating harq_status for harq_id %d,ack/nak %d
\n
"
,
harq_pid
,
current_harq
->
ack
);
}
else
{
//shouldn't get here
LOG_E
(
MAC
,
"Trying to process acknack for an inactive harq process (%d)
\n
"
,
harq_pid
);
}
}
int
nr_ue_ul_indication
(
nr_uplink_indication_t
*
ul_info
){
NR_UE_L2_STATE_t
ret
;
...
...
openair2/RRC/NR/nr_rrc_proto.h
View file @
aa023210
...
...
@@ -79,6 +79,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
int
scg_id
,
int
servCellIndex
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
initial_csi_index
,
int
uid
);
...
...
@@ -90,6 +91,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
initial_csi_index
,
int
uid
);
...
...
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
aa023210
...
...
@@ -241,6 +241,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
reconfig_ies
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
minRXTXTIMEpdsch
,
carrier
->
do_CSIRS
,
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
ue_context_p
->
local_uid
);
...
...
@@ -250,6 +251,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
reconfig_ies
,
ue_context_p
->
ue_context
.
secondaryCellGroup
,
carrier
->
pdsch_AntennaPorts
,
carrier
->
minRXTXTIMEpdsch
,
carrier
->
do_CSIRS
,
carrier
->
initial_csi_index
[
ue_context_p
->
local_uid
+
1
],
ue_context_p
->
local_uid
);
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
aa023210
...
...
@@ -55,6 +55,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
int
scg_id
,
int
servCellIndex
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
initial_csi_index
,
int
uid
)
{
...
...
@@ -945,7 +946,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
long
*
delay
[
8
];
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
delay
[
i
]
=
calloc
(
1
,
sizeof
(
*
delay
[
i
]));
*
delay
[
i
]
=
(
i
<
6
)
?
(
i
+
2
)
:
0
;
*
delay
[
i
]
=
i
+
minRXTXTIMEpdsch
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
dl_DataToUL_ACK
->
list
,
delay
[
i
]);
}
pucch_Config
->
spatialRelationInfoToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
spatialRelationInfoToAddModList
));
...
...
@@ -1348,6 +1349,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
NR_RRCReconfiguration_IEs_t
*
reconfig
,
NR_CellGroupConfig_t
*
secondaryCellGroup
,
int
dl_antenna_ports
,
int
minRXTXTIMEpdsch
,
int
do_csirs
,
int
initial_csi_index
,
int
uid
)
{
...
...
@@ -1363,6 +1365,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
1
,
1
,
dl_antenna_ports
,
minRXTXTIMEpdsch
,
do_csirs
,
initial_csi_index
,
uid
);
...
...
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