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
lizhongxiao
OpenXG-RAN
Commits
302f0166
Commit
302f0166
authored
Apr 22, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UE_TA_procedures_at_MAC' into integration_2023_w16b
parents
e31eacb3
eb09a630
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
201 additions
and
283 deletions
+201
-283
common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
+1
-4
executables/nr-ue.c
executables/nr-ue.c
+3
-6
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
+2
-1
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+6
-0
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+2
-3
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+2
-3
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+2
-2
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+2
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+5
-19
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+61
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+27
-171
openair1/SCHED_NR_UE/phy_sch_processing_time.h
openair1/SCHED_NR_UE/phy_sch_processing_time.h
+6
-6
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
...air1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
+0
-1
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+15
-4
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+2
-3
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+3
-9
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+30
-23
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+14
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+3
-5
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+13
-18
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+2
-2
No files found.
common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
View file @
302f0166
...
...
@@ -96,10 +96,7 @@ void measurcmd_display_phyta(telnet_printfunc_t prnt)
PHY_VARS_NR_UE
*
UE
=
PHY_vars_UE_g
[
0
][
0
];
prnt
(
"%s PHY TA stats
\n
"
,
HDR
);
prnt
(
"N_TA_offset %d
\n
"
,
UE
->
N_TA_offset
);
for
(
int
i
=
0
;
i
<
UE
->
n_connected_gNB
;
++
i
)
{
NR_UL_TIME_ALIGNMENT_t
*
ta
=
&
UE
->
ul_time_alignment
[
i
];
prnt
(
"gNB %d TA command %d TA total %d TAG ID %d
\n
"
,
i
,
ta
->
ta_command
,
ta
->
ta_total
,
ta
->
tag_id
);
}
prnt
(
"TA command %d
\n
"
,
UE
->
ta_command
);
prnt
(
"timing_advance %d (samples)
\n
"
,
UE
->
timing_advance
);
}
/*
...
...
executables/nr-ue.c
View file @
302f0166
...
...
@@ -154,7 +154,6 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
int
nb_connected_gNB
=
1
;
ue
->
Mod_id
=
UE_id
;
ue
->
mac_enabled
=
1
;
ue
->
if_inst
=
nr_ue_if_module_init
(
0
);
ue
->
dci_thres
=
0
;
ue
->
target_Nid_cell
=
-
1
;
...
...
@@ -259,8 +258,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
reset_queue
(
&
nr_ul_dci_req_queue
);
reset_queue
(
&
nr_ul_tti_req_queue
);
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
;
memset
(
&
ul_time_alignment
,
0
,
sizeof
(
ul_time_alignment
));
int
last_sfn_slot
=
-
1
;
uint16_t
sfn_slot
=
0
;
...
...
@@ -305,7 +302,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
if
(
get_softmodem_params
()
->
sa
&&
mac
->
mib
==
NULL
)
{
LOG_D
(
NR_MAC
,
"We haven't gotten MIB. Lets see if we received it
\n
"
);
nr_ue_dl_indication
(
&
mac
->
dl_info
,
&
ul_time_alignment
);
nr_ue_dl_indication
(
&
mac
->
dl_info
);
process_queued_nr_nfapi_msgs
(
mac
,
sfn_slot
);
}
if
(
mac
->
scc
==
NULL
&&
mac
->
scc_SIB
==
NULL
)
{
...
...
@@ -347,7 +344,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
mac
->
dl_info
.
slot
=
slot
;
mac
->
dl_info
.
dci_ind
=
NULL
;
mac
->
dl_info
.
rx_ind
=
NULL
;
nr_ue_dl_indication
(
&
mac
->
dl_info
,
&
ul_time_alignment
);
nr_ue_dl_indication
(
&
mac
->
dl_info
);
}
if
(
pthread_mutex_unlock
(
&
mac
->
mutex_dl_info
))
abort
();
...
...
@@ -628,7 +625,7 @@ nr_phy_data_t UE_dl_preprocessing(PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
if
(
UE
->
if_inst
!=
NULL
&&
UE
->
if_inst
->
dl_indication
!=
NULL
)
{
nr_downlink_indication_t
dl_indication
;
nr_fill_dl_indication
(
&
dl_indication
,
NULL
,
NULL
,
proc
,
UE
,
&
phy_data
);
UE
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
UE
->
if_inst
->
dl_indication
(
&
dl_indication
);
}
uint64_t
a
=
rdtsc_oai
();
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
View file @
302f0166
...
...
@@ -50,7 +50,8 @@
#define FAPI_NR_DL_CONFIG_TYPE_P_DLSCH 0x05
#define FAPI_NR_DL_CONFIG_TYPE_CSI_RS 0x06
#define FAPI_NR_DL_CONFIG_TYPE_CSI_IM 0x07
#define FAPI_NR_DL_CONFIG_TYPES 0x07
#define FAPI_NR_CONFIG_TA_COMMAND 0x08
#define FAPI_NR_DL_CONFIG_TYPES 0x08
#define FAPI_NR_CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
#define FAPI_NR_CCE_REG_MAPPING_TYPE_NON_INTERLEAVED 0x02
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
302f0166
...
...
@@ -526,6 +526,11 @@ typedef struct {
fapi_nr_dl_config_csiim_pdu_rel15_t
csiim_config_rel15
;
}
fapi_nr_dl_config_csiim_pdu
;
typedef
struct
{
int
ta_frame
;
int
ta_slot
;
int
ta_command
;
}
fapi_nr_ta_command_pdu
;
typedef
struct
{
uint8_t
pdu_type
;
...
...
@@ -534,6 +539,7 @@ typedef struct {
fapi_nr_dl_config_dlsch_pdu
dlsch_config_pdu
;
fapi_nr_dl_config_csirs_pdu
csirs_config_pdu
;
fapi_nr_dl_config_csiim_pdu
csiim_config_pdu
;
fapi_nr_ta_command_pdu
ta_command_pdu
;
};
}
fapi_nr_dl_config_request_pdu_t
;
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
302f0166
...
...
@@ -234,9 +234,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
ue
->
bitrate
[
gNB_id
]
=
0
;
ue
->
total_received_bits
[
gNB_id
]
=
0
;
ue
->
ul_time_alignment
[
gNB_id
].
apply_ta
=
0
;
ue
->
ul_time_alignment
[
gNB_id
].
ta_frame
=
-
1
;
ue
->
ul_time_alignment
[
gNB_id
].
ta_slot
=
-
1
;
}
// init NR modulation lookup tables
nr_generate_modulation_table
();
...
...
@@ -691,6 +688,8 @@ void init_N_TA_offset(PHY_VARS_NR_UE *ue){
}
ue
->
N_TA_offset
=
(
int
)(
N_TA_offset
*
factor
);
ue
->
ta_frame
=
-
1
;
ue
->
ta_slot
=
-
1
;
LOG_I
(
PHY
,
"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d, mu %d)
\n
"
,
ue
->
Mod_id
,
ue
->
N_TA_offset
,
factor
,
fp
->
ul_CarrierFreq
,
fp
->
N_RB_DL
,
fp
->
numerology_index
);
}
...
...
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
View file @
302f0166
...
...
@@ -980,9 +980,8 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t r
fapi_nr_rx_indication_t
rx_ind
=
{
0
};
nr_fill_dl_indication
(
&
dl_indication
,
NULL
,
&
rx_ind
,
proc
,
ue
,
NULL
);
nr_fill_rx_indication
(
&
rx_ind
,
FAPI_NR_CSIRS_IND
,
ue
,
NULL
,
NULL
,
1
,
proc
,
(
void
*
)
&
csirs_measurements
,
NULL
);
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
{
ue
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
}
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
ue
->
if_inst
->
dl_indication
(
&
dl_indication
);
return
0
;
}
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
302f0166
...
...
@@ -515,7 +515,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
}
// if stand alone and sync on ssb do sib1 detection as part of initial sync
if
(
sa
==
1
&&
ret
==
0
)
{
if
(
sa
==
1
&&
ret
==
0
)
{
nr_ue_dlsch_init
(
phy_data
.
dlsch
,
1
,
ue
->
max_ldpc_iterations
);
bool
dec
=
false
;
proc
->
gNB_id
=
0
;
//FIXME
...
...
@@ -524,7 +524,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
int32_t
pdcch_est_size
=
((((
fp
->
symbols_per_slot
*
(
fp
->
ofdm_symbol_size
+
LTE_CE_FILTER_LENGTH
))
+
15
)
/
16
)
*
16
);
__attribute__
((
aligned
(
16
)))
int32_t
pdcch_dl_ch_estimates
[
4
*
fp
->
nb_antennas_rx
][
pdcch_est_size
];
for
(
int
n_ss
=
0
;
n_ss
<
phy_pdcch_config
->
nb_search_space
;
n_ss
++
)
{
for
(
int
n_ss
=
0
;
n_ss
<
phy_pdcch_config
->
nb_search_space
;
n_ss
++
)
{
proc
->
nr_slot_rx
=
phy_pdcch_config
->
slot
;
// setting PDCCH slot to proc
uint8_t
nb_symb_pdcch
=
phy_pdcch_config
->
pdcch_config
[
n_ss
].
coreset
.
duration
;
int
start_symb
=
phy_pdcch_config
->
pdcch_config
[
n_ss
].
coreset
.
StartSymbolIndex
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
302f0166
...
...
@@ -520,7 +520,7 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
nr_fill_dl_indication
(
&
dl_indication
,
NULL
,
&
rx_ind
,
proc
,
ue
,
phy_data
);
nr_fill_rx_indication
(
&
rx_ind
,
FAPI_NR_RX_PDU_TYPE_SSB
,
ue
,
NULL
,
NULL
,
number_pdus
,
proc
,
NULL
,
NULL
);
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
ue
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
ue
->
if_inst
->
dl_indication
(
&
dl_indication
);
return
(
decoderState
);
}
// printf("polar decoder output 0x%08x\n",pbch_a_prime);
...
...
@@ -591,7 +591,7 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
nr_fill_rx_indication
(
&
rx_ind
,
FAPI_NR_RX_PDU_TYPE_SSB
,
ue
,
NULL
,
NULL
,
number_pdus
,
proc
,
(
void
*
)
result
,
NULL
);
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
ue
->
if_inst
->
dl_indication
(
&
dl_indication
,
NULL
);
ue
->
if_inst
->
dl_indication
(
&
dl_indication
);
return
0
;
}
openair1/PHY/defs_nr_UE.h
View file @
302f0166
...
...
@@ -358,18 +358,6 @@ typedef struct UE_NR_SCAN_INFO_s {
int32_t
freq_offset_Hz
[
3
][
10
];
}
UE_NR_SCAN_INFO_t
;
typedef
struct
NR_UL_TIME_ALIGNMENT
{
/// flag used by MAC to inform PHY about a TA to be applied
unsigned
char
apply_ta
;
/// frame and slot when to apply the TA as stated in TS 38.213 setion 4.2
int16_t
ta_frame
;
char
ta_slot
;
/// TA command and TAGID received from the gNB
uint16_t
ta_command
;
uint32_t
ta_total
;
uint8_t
tag_id
;
}
NR_UL_TIME_ALIGNMENT_t
;
/// Top-level PHY Data Structure for UE
typedef
struct
{
/// \brief Module ID indicator for this instance
...
...
@@ -519,7 +507,6 @@ typedef struct {
int
dlsch_mcch_trials
[
MAX_MBSFN_AREA
][
NUMBER_OF_CONNECTED_gNB_MAX
];
int
dlsch_mtch_trials
[
MAX_MBSFN_AREA
][
NUMBER_OF_CONNECTED_gNB_MAX
];
int
current_dlsch_cqi
[
NUMBER_OF_CONNECTED_gNB_MAX
];
unsigned
char
first_run_timing_advance
[
NUMBER_OF_CONNECTED_gNB_MAX
];
uint8_t
decode_SIB
;
uint8_t
decode_MIB
;
uint8_t
init_sync_frame
;
...
...
@@ -533,9 +520,11 @@ typedef struct {
/// Timing Advance updates variables
/// Timing advance update computed from the TA command signalled from gNB
int
timing_advance
;
int
N_TA_offset
;
///timing offset used in TDD
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
[
NUMBER_OF_CONNECTED_gNB_MAX
];
int
timing_advance
;
int
N_TA_offset
;
///timing offset used in TDD
int
ta_frame
;
int
ta_slot
;
int
ta_command
;
/// Flag to tell if UE is secondary user (cognitive mode)
unsigned
char
is_secondary_ue
;
...
...
@@ -546,9 +535,6 @@ typedef struct {
/// holds the maximum channel/precoder coefficient
char
log2_maxp
;
/// if ==0 enables phy only test mode
int
mac_enabled
;
/// Flag to initialize averaging of PHY measurements
int
init_averaging
;
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
302f0166
...
...
@@ -40,10 +40,11 @@
#include "PHY/impl_defs_nr.h"
#include "utils.h"
#include "openair2/PHY_INTERFACE/queue_t.h"
#include "SCHED_NR_UE/phy_sch_processing_time.h"
extern
PHY_VARS_NR_UE
***
PHY_vars_UE_g
;
const
char
*
dl_pdu_type
[]
=
{
"DCI"
,
"DLSCH"
,
"RA_DLSCH"
,
"SI_DLSCH"
,
"P_DLSCH"
,
"CSI_RS"
,
"CSI_IM"
};
const
char
*
dl_pdu_type
[]
=
{
"DCI"
,
"DLSCH"
,
"RA_DLSCH"
,
"SI_DLSCH"
,
"P_DLSCH"
,
"CSI_RS"
,
"CSI_IM"
,
"TA"
};
const
char
*
ul_pdu_type
[]
=
{
"PRACH"
,
"PUCCH"
,
"PUSCH"
,
"SRS"
};
queue_t
nr_rx_ind_queue
;
queue_t
nr_crc_ind_queue
;
...
...
@@ -331,6 +332,62 @@ void configure_dlsch(NR_UE_DLSCH_t *dlsch0,
}
void
configure_ta_command
(
PHY_VARS_NR_UE
*
ue
,
fapi_nr_ta_command_pdu
*
ta_command_pdu
)
{
/* Time Alignment procedure
// - UE processing capability 1
// - Setting the TA update to be applied after the reception of the TA command
// - Timing adjustment computed according to TS 38.213 section 4.2
// - Durations of N1 and N2 symbols corresponding to PDSCH and PUSCH are
// computed according to sections 5.3 and 6.4 of TS 38.214 */
const
int
numerology
=
ue
->
frame_parms
.
numerology_index
;
const
int
ofdm_symbol_size
=
ue
->
frame_parms
.
ofdm_symbol_size
;
const
int
nb_prefix_samples
=
ue
->
frame_parms
.
nb_prefix_samples
;
const
int
samples_per_subframe
=
ue
->
frame_parms
.
samples_per_subframe
;
const
int
slots_per_frame
=
ue
->
frame_parms
.
slots_per_frame
;
const
int
slots_per_subframe
=
ue
->
frame_parms
.
slots_per_subframe
;
const
double
tc_factor
=
1
.
0
/
samples_per_subframe
;
// convert time factor "16 * 64 * T_c / (2^mu)" in N_TA calculation in TS38.213 section 4.2 to samples by multiplying with samples per second
// 16 * 64 * T_c / (2^mu) * samples_per_second
// = 16 * T_s / (2^mu) * samples_per_second
// = 16 * 1 / (15 kHz * 2048) / (2^mu) * (15 kHz * 2^mu * ofdm_symbol_size)
// = 16 * 1 / 2048 * ofdm_symbol_size
// = 16 * ofdm_symbol_size / 2048
uint16_t
bw_scaling
=
16
*
ofdm_symbol_size
/
2048
;
const
int
Ta_max
=
3846
;
// Max value of 12 bits TA Command
const
double
N_TA_max
=
Ta_max
*
bw_scaling
*
tc_factor
;
// symbols corresponding to a PDSCH processing time for UE processing capability 1
// when additional PDSCH DM-RS is configured
int
N_1
=
pdsch_N_1_capability_1
[
numerology
][
3
];
/* PUSCH preapration time N_2 for processing capability 1 */
const
int
N_2
=
pusch_N_2_timing_capability_1
[
numerology
][
1
];
/* N_t_1 time duration in msec of N_1 symbols corresponding to a PDSCH reception time
// N_t_2 time duration in msec of N_2 symbols corresponding to a PUSCH preparation time */
double
N_t_1
=
N_1
*
(
ofdm_symbol_size
+
nb_prefix_samples
)
*
tc_factor
;
double
N_t_2
=
N_2
*
(
ofdm_symbol_size
+
nb_prefix_samples
)
*
tc_factor
;
/* Time alignment procedure */
// N_t_1 + N_t_2 + N_TA_max must be in msec
const
double
t_subframe
=
1
.
0
;
// subframe duration of 1 msec
const
int
ul_tx_timing_adjustment
=
1
+
(
int
)
ceil
(
slots_per_subframe
*
(
N_t_1
+
N_t_2
+
N_TA_max
+
0
.
5
)
/
t_subframe
);
ue
->
ta_slot
=
(
ta_command_pdu
->
ta_slot
+
ul_tx_timing_adjustment
)
%
slots_per_frame
;
if
(
ta_command_pdu
->
ta_slot
+
ul_tx_timing_adjustment
>
slots_per_frame
)
ue
->
ta_frame
=
(
ta_command_pdu
->
ta_frame
+
1
)
%
1024
;
else
ue
->
ta_frame
=
ta_command_pdu
->
ta_frame
;
ue
->
ta_command
=
ta_command_pdu
->
ta_command
;
LOG_D
(
PHY
,
"TA command received in Frame.Slot %d.%d -- Starting UL time alignment procedures. TA update will be applied at frame %d slot %d
\n
"
,
ta_command_pdu
->
ta_frame
,
ta_command_pdu
->
ta_slot
,
ue
->
ta_frame
,
ue
->
ta_slot
);
}
int8_t
nr_ue_scheduled_response
(
nr_scheduled_response_t
*
scheduled_response
){
bool
found
=
false
;
...
...
@@ -405,6 +462,9 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
configure_dlsch
(
dlsch0
,
PHY_vars_UE_g
[
module_id
][
cc_id
]
->
dl_harq_processes
[
0
],
dlsch_config_pdu
,
module_id
,
dl_config
->
dl_config_list
[
i
].
dlsch_config_pdu
.
rnti
);
}
break
;
case
FAPI_NR_CONFIG_TA_COMMAND
:
configure_ta_command
(
PHY_vars_UE_g
[
module_id
][
cc_id
],
&
dl_config
->
dl_config_list
[
i
].
ta_command_pdu
);
break
;
}
}
dl_config
->
number_pdus
=
0
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
302f0166
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR_UE/phy_sch_processing_time.h
View file @
302f0166
...
...
@@ -50,7 +50,7 @@
// when PDSCH DM-RS position l1 for the additional DM-RS is != 1,2
*/
int8_t
pdsch_N_1_capability_1
[
4
][
4
]
=
{
static
const
int8_t
pdsch_N_1_capability_1
[
4
][
4
]
=
{
/* mu A B C */
{
0
,
8
,
14
,
13
},
{
1
,
10
,
13
,
13
},
...
...
@@ -69,7 +69,7 @@ int8_t pdsch_N_1_capability_1[4][4] = {
// dmrs-DownlinkForPDSCH-MappingTypeA and dmrs-DownlinkForPDSCH-MappingTypeB
// mu == 2 is for FR1 only
*/
float
pdsch_N_1_capability_2
[
3
][
2
]
=
{
static
const
float
pdsch_N_1_capability_2
[
3
][
2
]
=
{
/* mu A */
{
0
,
3
},
{
1
,
4
.
5
},
...
...
@@ -84,7 +84,7 @@ float pdsch_N_1_capability_2[3][2] = {
// carrying the DCI scheduling the PUSCH was transmitted
// mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
*/
int8_t
pusch_N_2_timing_capability_1
[
4
][
2
]
=
{
static
const
int8_t
pusch_N_2_timing_capability_1
[
4
][
2
]
=
{
/* mu N_2 */
{
0
,
10
},
{
1
,
12
},
...
...
@@ -101,7 +101,7 @@ int8_t pusch_N_2_timing_capability_1[4][2] = {
// mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
// mu == 2 is for FR1 only
*/
float
pusch_N_2_timing_capability_2
[
3
][
2
]
=
{
static
const
float
pusch_N_2_timing_capability_2
[
3
][
2
]
=
{
/* mu N_2 */
{
0
,
5
},
{
1
,
5
.
5
},
...
...
@@ -116,7 +116,7 @@ float pusch_N_2_timing_capability_2[3][2] = {
// carrying the DCI scheduling the PUSCH was transmitted
// mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
*/
float
pusch_d_2_2_timing_capability_1
[
4
][
2
]
=
{
static
const
float
pusch_d_2_2_timing_capability_1
[
4
][
2
]
=
{
/* mu d_2_2 */
{
0
,
1
},
{
1
,
2
},
...
...
@@ -132,7 +132,7 @@ float pusch_d_2_2_timing_capability_1[4][2] = {
// carrying the DCI scheduling the PUSCH was transmitted
// mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
*/
float
pusch_d_2_2_timing_capability_2
[
4
][
2
]
=
{
static
const
float
pusch_d_2_2_timing_capability_2
[
4
][
2
]
=
{
/* mu d_2_2 */
{
0
,
3
},
{
1
,
5
},
...
...
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
View file @
302f0166
...
...
@@ -869,7 +869,6 @@ uint32_t tst_ue_get_SR(module_id_t module_idP,int CC_id,frame_t frameP,uint8_t e
*********************************************************************/
void
tst_set_sr_config
(
PHY_VARS_NR_UE
*
ue
,
int
gNB_id
)
{
ue
->
mac_enabled
=
1
;
ue
->
scheduling_request_config
[
gNB_id
].
sr_ConfigIndex
=
0
;
p_nr_ue_get_SR
=
tst_ue_get_SR
;
}
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
302f0166
...
...
@@ -378,6 +378,16 @@ typedef struct {
}
NR_SSB_meas_t
;
typedef
struct
NR_UL_TIME_ALIGNMENT
{
/// TA command and TAGID received from the gNB
bool
ta_apply
;
int
ta_command
;
int
ta_total
;
uint32_t
tag_id
;
int
frame
;
int
slot
;
}
NR_UL_TIME_ALIGNMENT_t
;
/*!\brief Top level UE MAC structure */
typedef
struct
{
NR_UE_L2_STATE_t
state
;
...
...
@@ -400,11 +410,12 @@ typedef struct {
NR_UE_DL_BWP_t
current_DL_BWP
;
NR_UE_UL_BWP_t
current_UL_BWP
;
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
;
NR_BWP_Downlink_t
*
DLbwp
[
MAX_NUM_BWP_UE
];
NR_BWP_Uplink_t
*
ULbwp
[
MAX_NUM_BWP_UE
];
NR_ControlResourceSet_t
*
coreset
[
MAX_NUM_BWP_UE
][
FAPI_NR_MAX_CORESET_PER_BWP
];
NR_SearchSpace_t
*
SSpace
[
MAX_NUM_BWP_UE
][
FAPI_NR_MAX_SS
];
NR_BWP_Downlink_t
*
DLbwp
[
MAX_NUM_BWP_UE
];
NR_BWP_Uplink_t
*
ULbwp
[
MAX_NUM_BWP_UE
];
NR_ControlResourceSet_t
*
coreset
[
MAX_NUM_BWP_UE
][
FAPI_NR_MAX_CORESET_PER_BWP
];
NR_SearchSpace_t
*
SSpace
[
MAX_NUM_BWP_UE
][
FAPI_NR_MAX_SS
];
bool
phy_config_request_sent
;
frame_type_t
frame_type
;
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
302f0166
...
...
@@ -232,11 +232,9 @@ uint8_t get_rsrp_diff_index(int best_rsrp,int current_rsrp);
@returns void
*/
void
nr_ue_send_sdu
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
);
void
nr_ue_process_mac_pdu
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
);
int
nr_write_ce_ulsch_pdu
(
uint8_t
*
mac_ce
,
...
...
@@ -322,6 +320,7 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
void
nr_ue_pucch_scheduler
(
module_id_t
module_idP
,
frame_t
frameP
,
int
slotP
,
void
*
phy_data
);
void
nr_schedule_csirs_reception
(
NR_UE_MAC_INST_t
*
mac
,
int
frame
,
int
slot
);
void
nr_schedule_csi_for_im
(
NR_UE_MAC_INST_t
*
mac
,
int
frame
,
int
slot
);
void
schedule_ta_command
(
fapi_nr_dl_config_request_t
*
dl_config
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
);
/* \brief This function schedules the Msg3 transmission
@param
...
...
@@ -356,7 +355,7 @@ random-access procedure
@param selected_rar_buffer the output buffer for storing the selected RAR header and RAR payload
@returns timing advance or 0xffff if preamble doesn't match
*/
int
nr_ue_process_rar
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
);
int
nr_ue_process_rar
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
);
void
nr_ue_contention_resolution
(
module_id_t
module_id
,
int
cc_id
,
frame_t
frame
,
int
slot
,
NR_PRACH_RESOURCES_t
*
prach_resources
);
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
302f0166
...
...
@@ -51,16 +51,10 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
//LOG_I(MAC, "[MAIN] init UE MAC functions \n");
//init mac here
nr_ue_mac_inst
=
(
NR_UE_MAC_INST_t
*
)
calloc
(
sizeof
(
NR_UE_MAC_INST_t
),
NB_NR_UE_MAC_INST
);
nr_ue_mac_inst
->
first_sync_frame
=
-
1
;
nr_ue_mac_inst
->
sib1_decoded
=
false
;
nr_ue_mac_inst
->
phy_config_request_sent
=
false
;
nr_ue_mac_inst
->
state
=
UE_NOT_SYNC
;
memset
(
&
nr_ue_mac_inst
->
ssb_measurements
,
0
,
sizeof
(
nr_ue_mac_inst
->
ssb_measurements
));
nr_ue_mac_inst
=
(
NR_UE_MAC_INST_t
*
)
calloc
(
sizeof
(
NR_UE_MAC_INST_t
),
NB_NR_UE_MAC_INST
);
for
(
int
j
=
0
;
j
<
NB_NR_UE_MAC_INST
;
j
++
)
{
nr_ue_init_mac
(
j
);
}
for
(
int
j
=
0
;
j
<
NB_NR_UE_MAC_INST
;
j
++
)
nr_ue_init_mac
(
j
);
if
(
rrc_inst
&&
rrc_inst
->
scell_group_config
)
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
302f0166
...
...
@@ -151,9 +151,8 @@ const initial_pucch_resource_t initial_pucch_resource[16] = {
};
void
nr_ue_init_mac
(
module_id_t
module_idP
)
{
int
i
;
void
nr_ue_init_mac
(
module_id_t
module_idP
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
// default values as deined in 38.331 sec 9.2.2
LOG_I
(
NR_MAC
,
"[UE%d] Applying default macMainConfig
\n
"
,
module_idP
);
...
...
@@ -182,7 +181,7 @@ void nr_ue_init_mac(module_id_t module_idP) {
// mac->scheduling_info.PathlossChange_db = nr_get_db_dl_PathlossChange(mac->scheduling_info.PathlossChange);
// mac->PHR_reporting_active = 0;
for
(
i
=
0
;
i
<
NR_MAX_NUM_LCID
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
NR_MAX_NUM_LCID
;
i
++
)
{
LOG_D
(
NR_MAC
,
"[UE%d] Applying default logical channel config for LCGID %d
\n
"
,
module_idP
,
i
);
mac
->
scheduling_info
.
Bj
[
i
]
=
-
1
;
...
...
@@ -196,8 +195,16 @@ void nr_ue_init_mac(module_id_t module_idP) {
mac
->
scheduling_info
.
LCID_status
[
i
]
=
LCID_EMPTY
;
mac
->
scheduling_info
.
LCID_buffer_remain
[
i
]
=
0
;
for
(
int
i
=
0
;
i
<
NR_MAX_HARQ_PROCESSES
;
i
++
)
mac
->
first_ul_tx
[
i
]
=
1
;
for
(
int
i
=
0
;
i
<
NR_MAX_HARQ_PROCESSES
;
i
++
)
mac
->
first_ul_tx
[
i
]
=
1
;
}
mac
->
first_sync_frame
=
-
1
;
mac
->
sib1_decoded
=
false
;
mac
->
phy_config_request_sent
=
false
;
mac
->
state
=
UE_NOT_SYNC
;
memset
(
&
mac
->
ssb_measurements
,
0
,
sizeof
(
mac
->
ssb_measurements
));
memset
(
&
mac
->
ul_time_alignment
,
0
,
sizeof
(
mac
->
ul_time_alignment
));
}
NR_BWP_DownlinkCommon_t
*
get_bwp_downlink_common
(
NR_UE_MAC_INST_t
*
mac
,
NR_BWP_Id_t
dl_bwp_id
)
{
...
...
@@ -2809,8 +2816,8 @@ uint8_t get_rsrp_diff_index(int best_rsrp,int current_rsrp) {
}
void
nr_ue_send_sdu
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
){
void
nr_ue_send_sdu
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU
,
VCD_FUNCTION_IN
);
LOG_D
(
MAC
,
"In %s [%d.%d] Handling DLSCH PDU...
\n
"
,
__FUNCTION__
,
dl_info
->
frame
,
dl_info
->
slot
);
...
...
@@ -2819,10 +2826,10 @@ void nr_ue_send_sdu(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
// it parses MAC CEs subheaders, MAC CEs, SDU subheaderds and SDUs
switch
(
dl_info
->
rx_ind
->
rx_indication_body
[
pdu_id
].
pdu_type
){
case
FAPI_NR_RX_PDU_TYPE_DLSCH
:
nr_ue_process_mac_pdu
(
dl_info
,
ul_time_alignment
,
pdu_id
);
nr_ue_process_mac_pdu
(
dl_info
,
pdu_id
);
break
;
case
FAPI_NR_RX_PDU_TYPE_RAR
:
nr_ue_process_rar
(
dl_info
,
ul_time_alignment
,
pdu_id
);
nr_ue_process_rar
(
dl_info
,
pdu_id
);
break
;
default:
break
;
...
...
@@ -3536,8 +3543,8 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
// R: Reserved bit, set to zero.
////////////////////////////////
void
nr_ue_process_mac_pdu
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
)
{
int
pdu_id
)
{
module_id_t
module_idP
=
dl_info
->
module_id
;
frame_t
frameP
=
dl_info
->
frame
;
...
...
@@ -3657,11 +3664,14 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info,
const
int
ta
=
((
NR_MAC_CE_TA
*
)
pduP
)[
1
].
TA_COMMAND
;
const
int
tag
=
((
NR_MAC_CE_TA
*
)
pduP
)[
1
].
TAGID
;
ul_time_alignment
->
apply_ta
=
1
;
ul_time_alignment
->
ta_command
=
ta
;
//here
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
=
&
mac
->
ul_time_alignment
;
ul_time_alignment
->
ta_total
+=
ta
-
31
;
ul_time_alignment
->
tag_id
=
tag
;
ul_time_alignment
->
ta_command
=
ta
;
ul_time_alignment
->
frame
=
frameP
;
ul_time_alignment
->
slot
=
slot
;
ul_time_alignment
->
ta_apply
=
true
;
/*
#ifdef DEBUG_HEADER_PARSING
LOG_D(MAC, "[UE] CE %d : UE Timing Advance : %d\n", i, pduP[1]);
...
...
@@ -3944,8 +3954,8 @@ int nr_write_ce_ulsch_pdu(uint8_t *mac_ce,
// - b buffer
// - ulsch power offset
// - optimize: mu_pusch, j and table_6_1_2_1_1_2_time_dom_res_alloc_A are already defined in nr_ue_procedures
int
nr_ue_process_rar
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
,
int
pdu_id
){
int
nr_ue_process_rar
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
)
{
module_id_t
mod_id
=
dl_info
->
module_id
;
frame_t
frame
=
dl_info
->
frame
;
int
slot
=
dl_info
->
slot
;
...
...
@@ -4030,12 +4040,12 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t
#endif
// TA command
ul_time_alignment
->
apply_ta
=
1
;
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
=
&
mac
->
ul_time_alignment
;
const
int
ta
=
rar
->
TA2
+
(
rar
->
TA1
<<
5
);
ul_time_alignment
->
ta_command
=
31
+
ta
;
ul_time_alignment
->
ta_total
=
ta
;
LOG_W
(
MAC
,
"received TA command %d
\n
"
,
ul_time_alignment
->
ta_command
)
;
ul_time_alignment
->
ta_apply
=
true
;
LOG_W
(
MAC
,
"received TA command %d
\n
"
,
31
+
ta
);
#ifdef DEBUG_RAR
// CSI
csi_req
=
(
unsigned
char
)
(
rar
->
UL_GRANT_4
&
0x01
);
...
...
@@ -4103,7 +4113,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t
mod_id
,
rar_grant
.
Msg3_t_alloc
,
rar_grant
.
Msg3_f_alloc
,
ul_time_alignment
->
ta_command
,
ta_command
,
rar_grant
.
mcs
,
rar_grant
.
freq_hopping
,
tpc_command
,
...
...
@@ -4149,10 +4159,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t
}
}
else
{
ra
->
t_crnti
=
0
;
ul_time_alignment
->
ta_command
=
(
0xffff
);
}
return
ret
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
302f0166
...
...
@@ -1024,6 +1024,8 @@ void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info)
nr_ue_dcireq
(
&
dcireq
);
//to be replaced with function pointer later
*
dl_config
=
dcireq
.
dl_config_req
;
if
(
mac
->
ul_time_alignment
.
ta_apply
)
schedule_ta_command
(
dl_config
,
&
mac
->
ul_time_alignment
);
nr_schedule_csirs_reception
(
mac
,
rx_frame
,
rx_slot
);
nr_schedule_csi_for_im
(
mac
,
rx_frame
,
rx_slot
);
dcireq
.
dl_config_req
=
*
dl_config
;
...
...
@@ -1037,6 +1039,8 @@ void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info)
else
if
(
mac
->
state
==
UE_PERFORMING_RA
)
{
// this is for Msg2/Msg4
if
(
mac
->
ra
.
ra_state
>=
WAIT_RAR
)
{
if
(
mac
->
ul_time_alignment
.
ta_apply
)
schedule_ta_command
(
dl_config
,
&
mac
->
ul_time_alignment
);
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
=
&
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
dci_config_pdu
.
dci_config_rel15
;
rel15
->
num_dci_options
=
mac
->
ra
.
ra_state
==
WAIT_RAR
?
1
:
2
;
rel15
->
dci_format_options
[
0
]
=
NR_DL_DCI_FORMAT_1_0
;
...
...
@@ -3171,5 +3175,15 @@ uint8_t nr_ue_get_sdu(module_id_t module_idP,
#endif
return
num_sdus
>
0
?
1
:
0
;
}
void
schedule_ta_command
(
fapi_nr_dl_config_request_t
*
dl_config
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
)
{
fapi_nr_ta_command_pdu
*
ta
=
&
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
ta_command_pdu
;
ta
->
ta_frame
=
ul_time_alignment
->
frame
;
ta
->
ta_slot
=
ul_time_alignment
->
slot
;
ta
->
ta_command
=
ul_time_alignment
->
ta_command
;
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_CONFIG_TA_COMMAND
;
dl_config
->
number_pdus
+=
1
;
ul_time_alignment
->
ta_apply
=
false
;
}
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
302f0166
...
...
@@ -108,10 +108,8 @@ int nr_write_ce_dlsch_pdu(module_id_t module_idP,
AssertFatal
(
timing_advance_cmd
<
64
,
"timing_advance_cmd %d > 63
\n
"
,
timing_advance_cmd
);
((
NR_MAC_CE_TA
*
)
ce_ptr
)
->
TA_COMMAND
=
timing_advance_cmd
;
//(timing_advance_cmd+31)&0x3f;
if
(
gNB
->
tag
->
tag_Id
!=
0
)
{
tag_id
=
gNB
->
tag
->
tag_Id
;
((
NR_MAC_CE_TA
*
)
ce_ptr
)
->
TAGID
=
tag_id
;
}
tag_id
=
gNB
->
tag
->
tag_Id
;
((
NR_MAC_CE_TA
*
)
ce_ptr
)
->
TAGID
=
tag_id
;
LOG_D
(
NR_MAC
,
"NR MAC CE timing advance command = %d (%d) TAG ID = %d
\n
"
,
timing_advance_cmd
,
((
NR_MAC_CE_TA
*
)
ce_ptr
)
->
TA_COMMAND
,
tag_id
);
mac_ce_size
=
sizeof
(
NR_MAC_CE_TA
);
...
...
@@ -1191,7 +1189,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
T_INT
(
frame
),
T_INT
(
slot
),
T_INT
(
current_harq_pid
),
T_INT
(
harq
->
round
),
T_BUFFER
(
harq
->
transportBlock
,
TBS
));
UE
->
mac_stats
.
dl
.
total_rbs_retx
+=
sched_pdsch
->
rbSize
;
}
else
{
/* initial transmission */
LOG_D
(
NR_MAC
,
"
[%s] Initial HARQ transmission in %d.%d
\n
"
,
__FUNCTION__
,
frame
,
slot
);
LOG_D
(
NR_MAC
,
"
Initial HARQ transmission in %d.%d
\n
"
,
frame
,
slot
);
uint8_t
*
buf
=
(
uint8_t
*
)
harq
->
transportBlock
;
/* first, write all CEs that might be there */
int
written
=
nr_write_ce_dlsch_pdu
(
module_id
,
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
302f0166
...
...
@@ -443,9 +443,7 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_
rx_ind
->
sfn
=
dl_tti_request
->
SFN
;
rx_ind
->
slot
=
dl_tti_request
->
Slot
;
fill_mib_in_rx_ind
(
pdu_list
,
rx_ind
,
0
,
FAPI_NR_RX_PDU_TYPE_SSB
);
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
;
memset
(
&
ul_time_alignment
,
0
,
sizeof
(
ul_time_alignment
));
nr_ue_dl_indication
(
&
mac
->
dl_info
,
&
ul_time_alignment
);
nr_ue_dl_indication
(
&
mac
->
dl_info
);
}
}
dl_info
->
slot
=
dl_tti_request
->
Slot
;
...
...
@@ -729,15 +727,12 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
return
;
}
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
;
memset
(
&
ul_time_alignment
,
0
,
sizeof
(
ul_time_alignment
));
if
(
dl_tti_request
||
tx_data_request
||
ul_dci_request
)
{
fapi_nr_dl_config_request_t
*
dl_config
=
get_dl_config_request
(
mac
,
slot
);
fill_dci_from_dl_config
(
&
mac
->
dl_info
,
dl_config
);
}
nr_ue_dl_scheduler
(
&
mac
->
dl_info
);
nr_ue_dl_indication
(
&
mac
->
dl_info
,
&
ul_time_alignment
);
nr_ue_dl_indication
(
&
mac
->
dl_info
);
if
(
pthread_mutex_unlock
(
&
mac
->
mutex_dl_info
))
abort
();
...
...
@@ -1085,7 +1080,8 @@ void handle_ssb_meas(NR_UE_MAC_INST_t *mac, uint8_t ssb_index, int16_t rsrp_dbm)
// L2 Abstraction Layer
// 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
){
int8_t
handle_dlsch
(
nr_downlink_indication_t
*
dl_info
,
int
pdu_id
)
{
/* L1 assigns harq_pid, but in emulated L1 mode we need to assign
the harq_pid based on the saved global g_harq_pid. Because we are
emulating L1, no antenna measurements are conducted to calculate
...
...
@@ -1097,7 +1093,7 @@ int8_t handle_dlsch(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
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
);
nr_ue_send_sdu
(
dl_info
,
pdu_id
);
return
0
;
}
...
...
@@ -1142,8 +1138,8 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info)
return
0
;
}
int
nr_ue_dl_indication
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
){
int
nr_ue_dl_indication
(
nr_downlink_indication_t
*
dl_info
)
{
pthread_mutex_lock
(
&
mac_IF_mutex
);
uint32_t
ret_mask
=
0x0
;
module_id_t
module_id
=
dl_info
->
module_id
;
...
...
@@ -1193,13 +1189,12 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
if
(
dl_info
->
rx_ind
!=
NULL
)
{
for
(
int
i
=
0
;
i
<
dl_info
->
rx_ind
->
number_pdus
;
++
i
)
{
for
(
int
i
=
0
;
i
<
dl_info
->
rx_ind
->
number_pdus
;
++
i
)
{
fapi_nr_rx_indication_body_t
rx_indication_body
=
dl_info
->
rx_ind
->
rx_indication_body
[
i
];
LOG_D
(
NR_MAC
,
"In %s sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs
\n
"
,
__FUNCTION__
,
rx_indication_body
.
pdu_type
,
dl_info
->
rx_ind
->
number_pdus
);
LOG_D
(
NR_MAC
,
"Sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs
\n
"
,
rx_indication_body
.
pdu_type
,
dl_info
->
rx_ind
->
number_pdus
);
switch
(
rx_indication_body
.
pdu_type
){
case
FAPI_NR_RX_PDU_TYPE_SSB
:
...
...
@@ -1226,10 +1221,10 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
rx_indication_body
.
pdsch_pdu
.
pdu_length
))
<<
FAPI_NR_RX_PDU_TYPE_SIB
;
break
;
case
FAPI_NR_RX_PDU_TYPE_DLSCH
:
ret_mask
|=
(
handle_dlsch
(
dl_info
,
ul_time_alignment
,
i
))
<<
FAPI_NR_RX_PDU_TYPE_DLSCH
;
ret_mask
|=
(
handle_dlsch
(
dl_info
,
i
))
<<
FAPI_NR_RX_PDU_TYPE_DLSCH
;
break
;
case
FAPI_NR_RX_PDU_TYPE_RAR
:
ret_mask
|=
(
handle_dlsch
(
dl_info
,
ul_time_alignment
,
i
))
<<
FAPI_NR_RX_PDU_TYPE_RAR
;
ret_mask
|=
(
handle_dlsch
(
dl_info
,
i
))
<<
FAPI_NR_RX_PDU_TYPE_RAR
;
break
;
case
FAPI_NR_CSIRS_IND
:
ret_mask
|=
(
handle_csirs_measurements
(
dl_info
->
module_id
,
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
View file @
302f0166
...
...
@@ -195,7 +195,7 @@ typedef void (nr_ue_synch_request_f)(nr_synch_request_t *synch_request);
* -1: Failed to consume bytes. Abort the mission.
* Non-negative return values indicate success, and ignored.
*/
typedef
int
(
nr_ue_dl_indication_f
)(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
);
typedef
int
(
nr_ue_dl_indication_f
)(
nr_downlink_indication_t
*
dl_info
);
/*
* Generic type of an application-defined callback to return various
...
...
@@ -256,7 +256,7 @@ int nr_ue_if_module_kill(uint32_t module_id);
/**\brief interface between L1/L2, indicating the downlink related information, like dci_ind and rx_req
\param dl_info including dci_ind and rx_request messages*/
int
nr_ue_dl_indication
(
nr_downlink_indication_t
*
dl_info
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
);
int
nr_ue_dl_indication
(
nr_downlink_indication_t
*
dl_info
);
int
nr_ue_ul_indication
(
nr_uplink_indication_t
*
ul_info
);
...
...
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