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
spbro
OpenXG-RAN
Commits
fc612275
Commit
fc612275
authored
Aug 01, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-CSI-Measurements' into integration_2022_wk30b
parents
eb46f216
b7b6e8a6
Changes
42
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
1683 additions
and
912 deletions
+1683
-912
doc/FEATURE_SET.md
doc/FEATURE_SET.md
+9
-2
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
+1
-0
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+9
-4
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+11
-11
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+17
-44
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+3
-3
openair1/PHY/NR_REFSIG/nr_refsig.h
openair1/PHY/NR_REFSIG/nr_refsig.h
+1
-1
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+1
-1
openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
+47
-37
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+9
-9
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+13
-5
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+2
-2
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+678
-89
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+9
-17
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+2
-2
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+4
-13
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+1
-1
openair1/SCHED_NR_UE/defs.h
openair1/SCHED_NR_UE/defs.h
+1
-1
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+1
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+20
-3
openair1/SIMULATION/NR_PHY/dlschsim.c
openair1/SIMULATION/NR_PHY/dlschsim.c
+11
-11
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-1
openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
+1
-1
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+2
-2
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
+34
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+518
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+33
-1
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+5
-0
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+13
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+132
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+1
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+2
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+3
-532
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+60
-59
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+7
-9
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+0
-33
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+11
-1
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+4
-3
openair2/RRC/NR/nr_rrc_config.h
openair2/RRC/NR/nr_rrc_config.h
+2
-1
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+1
-1
No files found.
doc/FEATURE_SET.md
View file @
fc612275
...
...
@@ -440,6 +440,10 @@ The following features are valid for the gNB and the 5G-NR UE.
-
PTRS support
-
Support for 1, 2 and 4 RX antennas
-
Support for up to 2 layers (currently limited to DMRS configuration type 2)
*
Measurements based on NR-CSIRS
-
RI, PMI and CQI computation
-
Support for 1 and 2 RX antennas
-
Support for up to 2 layers
*
NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
-
PUSCH mapping type A and B
-
DMRS configuration type 1 and 2
...
...
@@ -488,12 +492,15 @@ The following features are valid for the gNB and the 5G-NR UE.
*
UCI processing
-
ACK/NACK processing
-
Triggering periodic SR
-
CSI measurement reporting
(SSB RSRP only)
*
DLSH scheduler
-
CSI measurement reporting
*
DLS
C
H scheduler
-
Configuration of fapi PDU according to DCI
-
HARQ procedures
*
ULSCH scheduler
-
Configuration of fapi PDU according to DCI
*
NR-CSIRS scheduler
-
Scheduling of NR-CSIRS reception
-
Fill UCI for CSI measurement reporting
*
Scheduler procedures for SRS transmission
-
Periodic SRS transmission
*
Bandwidth part (BWP) operation
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
View file @
fc612275
...
...
@@ -20,6 +20,7 @@
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
#define FAPI_NR_DCI_IND 0x04
#define FAPI_NR_RX_PDU_TYPE_RAR 0x05
#define FAPI_NR_CSIRS_IND 0x06
#define FAPI_NR_SIBS_MASK_SIB1 0x1
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
fc612275
...
...
@@ -36,9 +36,6 @@
*/
typedef
struct
{
uint8_t
uci_format
;
uint8_t
uci_channel
;
...
...
@@ -50,7 +47,14 @@ typedef struct {
uint32_t
sr
;
}
fapi_nr_uci_pdu_rel15_t
;
typedef
struct
{
uint32_t
rsrp
;
int
rsrp_dBm
;
uint8_t
rank_indicator
;
uint8_t
i1
;
uint8_t
i2
;
uint8_t
cqi
;
}
fapi_nr_csirs_measurements_t
;
typedef
struct
{
/// frequency_domain_resource;
...
...
@@ -130,6 +134,7 @@ typedef struct {
fapi_nr_pdsch_pdu_t
pdsch_pdu
;
fapi_nr_ssb_pdu_t
ssb_pdu
;
fapi_nr_sib_pdu_t
sib_pdu
;
fapi_nr_csirs_measurements_t
csirs_measurements
;
};
}
fapi_nr_rx_indication_body_t
;
...
...
openair1/PHY/INIT/nr_init.c
View file @
fc612275
...
...
@@ -596,20 +596,20 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
// CSI RS init
// ceil((NB_RB*8(max allocation per RB)*2(QPSK))/32)
int
csi_dmrs_init_length
=
((
fp
->
N_RB_DL
<<
4
)
>>
5
)
+
1
;
gNB
->
nr_csi_
rs_info
=
(
nr_csi_rs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_csi_rs
_info_t
));
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
AssertFatal
(
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
!=
NULL
,
"NR init: csi reference signal malloc failed
\n
"
);
gNB
->
nr_csi_
info
=
(
nr_csi_info_t
*
)
malloc16_clear
(
sizeof
(
nr_csi
_info_t
));
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
AssertFatal
(
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
!=
NULL
,
"NR init: csi reference signal malloc failed
\n
"
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
]
!=
NULL
,
"NR init: csi reference signal for slot %d - malloc failed
\n
"
,
slot
);
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
]
!=
NULL
,
"NR init: csi reference signal for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
csi_dmrs_init_length
*
sizeof
(
uint32_t
));
AssertFatal
(
gNB
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
][
symb
]
!=
NULL
,
"NR init: csi reference signal for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
csi_dmrs_init_length
*
sizeof
(
uint32_t
));
AssertFatal
(
gNB
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
][
symb
]
!=
NULL
,
"NR init: csi reference signal for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
}
}
gNB
->
nr_csi_
rs_
info
->
csi_gold_init
=
cfg
->
cell_config
.
phy_cell_id
.
value
;
nr_init_csi_rs
(
&
gNB
->
frame_parms
,
gNB
->
nr_csi_
rs_
info
->
nr_gold_csi_rs
,
cfg
->
cell_config
.
phy_cell_id
.
value
);
gNB
->
nr_csi_info
->
csi_gold_init
=
cfg
->
cell_config
.
phy_cell_id
.
value
;
nr_init_csi_rs
(
&
gNB
->
frame_parms
,
gNB
->
nr_csi_info
->
nr_gold_csi_rs
,
cfg
->
cell_config
.
phy_cell_id
.
value
);
for
(
int
id
=
0
;
id
<
NUMBER_OF_NR_SRS_MAX
;
id
++
)
{
gNB
->
nr_srs_info
[
id
]
=
(
nr_srs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_srs_info_t
));
...
...
@@ -760,14 +760,14 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
}
free_and_zero
(
pusch_dmrs
);
uint32_t
***
nr_gold_csi_rs
=
gNB
->
nr_csi_
rs_
info
->
nr_gold_csi_rs
;
uint32_t
***
nr_gold_csi_rs
=
gNB
->
nr_csi_info
->
nr_gold_csi_rs
;
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
free_and_zero
(
nr_gold_csi_rs
[
slot
][
symb
]);
free_and_zero
(
nr_gold_csi_rs
[
slot
]);
}
free_and_zero
(
nr_gold_csi_rs
);
free_and_zero
(
gNB
->
nr_csi_
rs_
info
);
free_and_zero
(
gNB
->
nr_csi_info
);
for
(
int
id
=
0
;
id
<
NUMBER_OF_NR_SRS_MAX
;
id
++
)
{
free_and_zero
(
gNB
->
nr_srs_info
[
id
]);
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
fc612275
...
...
@@ -159,7 +159,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
NR_UE_CSI_RS
**
const
csirs_vars
=
ue
->
csirs_vars
;
NR_UE_SRS
**
const
srs_vars
=
ue
->
srs_vars
;
int
i
,
j
,
slot
,
symb
,
gNB_id
,
th_id
;
int
i
,
slot
,
symb
,
gNB_id
,
th_id
;
LOG_I
(
PHY
,
"Initializing UE vars for gNB TXant %u, UE RXant %u
\n
"
,
fp
->
nb_antennas_tx
,
fp
->
nb_antennas_rx
);
...
...
@@ -347,33 +347,20 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
// ceil((NB_RB*8(max allocation per RB)*2(QPSK))/32)
int
csi_dmrs_init_length
=
((
fp
->
N_RB_DL
<<
4
)
>>
5
)
+
1
;
ue
->
nr_csi_
rs_info
=
(
nr_csi_rs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_csi_rs
_info_t
));
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
AssertFatal
(
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
!=
NULL
,
"NR init: csi reference signal malloc failed
\n
"
);
ue
->
nr_csi_
info
=
(
nr_csi_info_t
*
)
malloc16_clear
(
sizeof
(
nr_csi
_info_t
));
ue
->
nr_csi_
info
->
nr_gold_csi_rs
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
AssertFatal
(
ue
->
nr_csi_
info
->
nr_gold_csi_rs
!=
NULL
,
"NR init: csi reference signal malloc failed
\n
"
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
]
!=
NULL
,
"NR init: csi reference signal for slot %d - malloc failed
\n
"
,
slot
);
ue
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
ue
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
]
!=
NULL
,
"NR init: csi reference signal for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
csi_dmrs_init_length
*
sizeof
(
uint32_t
));
AssertFatal
(
ue
->
nr_csi_
rs_info
->
nr_gold_csi_rs
[
slot
][
symb
]
!=
NULL
,
"NR init: csi reference signal for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
ue
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
csi_dmrs_init_length
*
sizeof
(
uint32_t
));
AssertFatal
(
ue
->
nr_csi_
info
->
nr_gold_csi_rs
[
slot
][
symb
]
!=
NULL
,
"NR init: csi reference signal for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
}
}
ue
->
nr_csi_rs_info
->
noise_power
=
(
uint32_t
*
)
malloc16_clear
(
sizeof
(
uint32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
=
(
int32_t
**
)
malloc16
(
NR_MAX_NB_PORTS
*
sizeof
(
int32_t
*
)
);
ue
->
nr_csi_info
->
csi_rs_generated_signal
=
(
int32_t
**
)
malloc16
(
NR_MAX_NB_PORTS
*
sizeof
(
int32_t
*
)
);
for
(
i
=
0
;
i
<
NR_MAX_NB_PORTS
;
i
++
)
{
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
}
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
=
(
int32_t
**
)
malloc16
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
=
(
int32_t
***
)
malloc16
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
**
)
);
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
=
(
int32_t
***
)
malloc16
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
**
)
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
]
=
(
int32_t
**
)
malloc16_clear
(
NR_MAX_NB_PORTS
*
sizeof
(
int32_t
*
));
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
]
=
(
int32_t
**
)
malloc16_clear
(
NR_MAX_NB_PORTS
*
sizeof
(
int32_t
*
));
for
(
j
=
0
;
j
<
NR_MAX_NB_PORTS
;
j
++
)
{
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
][
j
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
][
j
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
}
ue
->
nr_csi_info
->
csi_rs_generated_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
}
ue
->
nr_srs_info
=
(
nr_srs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_srs_info_t
));
...
...
@@ -470,39 +457,25 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
free_and_zero
(
ue
->
pdsch_vars
[
th_id
][
gNB_id
]);
}
}
for
(
int
gNB_id
=
0
;
gNB_id
<
ue
->
n_connected_gNB
;
gNB_id
++
)
{
for
(
int
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
free_and_zero
(
ue
->
pdcch_vars
[
th_id
][
gNB_id
]);
}
for
(
int
i
=
0
;
i
<
NR_MAX_NB_PORTS
;
i
++
)
{
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
[
i
]);
}
for
(
int
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
[
i
]);
for
(
int
j
=
0
;
j
<
NR_MAX_NB_PORTS
;
j
++
)
{
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
][
j
]);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
][
j
]);
}
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
]);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
]);
free_and_zero
(
ue
->
nr_csi_info
->
csi_rs_generated_signal
[
i
]);
}
free_and_zero
(
ue
->
nr_csi_info
->
csi_rs_generated_signal
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
free_and_zero
(
ue
->
nr_csi_
rs_
info
->
nr_gold_csi_rs
[
slot
][
symb
]);
free_and_zero
(
ue
->
nr_csi_info
->
nr_gold_csi_rs
[
slot
][
symb
]);
}
free_and_zero
(
ue
->
nr_csi_
rs_
info
->
nr_gold_csi_rs
[
slot
]);
free_and_zero
(
ue
->
nr_csi_info
->
nr_gold_csi_rs
[
slot
]);
}
free_and_zero
(
ue
->
nr_csi_rs_info
->
noise_power
);
free_and_zero
(
ue
->
nr_csi_rs_info
->
nr_gold_csi_rs
);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
);
free_and_zero
(
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
);
free_and_zero
(
ue
->
nr_csi_rs_info
);
free_and_zero
(
ue
->
nr_csi_info
->
nr_gold_csi_rs
);
free_and_zero
(
ue
->
nr_csi_info
);
free_and_zero
(
ue
->
nr_srs_info
);
...
...
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
fc612275
...
...
@@ -151,9 +151,9 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
NR_gNB_COMMON
*
common_vars
=
&
gNB
->
common_vars
;
PHY_MEASUREMENTS_gNB
*
measurements
=
&
gNB
->
measurements
;
int
rb
,
nb_symb
[
275
]
=
{
0
};
memset
(
measurements
->
n0_subband_power
,
0
,
sizeof
(
measurements
->
n0_subband_power
));
for
(
int
s
=
first_symb
;
s
<
(
first_symb
+
num_symb
);
s
++
)
{
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_UL
;
rb
++
)
{
if
(
s
==
first_symb
/*&& ((gNB->rb_mask_ul[s][rb>>5]&(1<<(rb&31))) == 0)*/
)
{
...
...
@@ -168,7 +168,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
int
offset
=
offset0
+
(
s
*
frame_parms
->
ofdm_symbol_size
);
int32_t
*
ul_ch
=
&
common_vars
->
rxdataF
[
aarx
][
offset
];
int
len
=
12
;
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
if
(((
frame_parms
->
N_RB_UL
&
1
)
==
1
)
&&
(
rb
==
(
frame_parms
->
N_RB_UL
>>
1
)))
{
len
=
6
;
}
...
...
openair1/PHY/NR_REFSIG/nr_refsig.h
View file @
fc612275
...
...
@@ -38,7 +38,7 @@ void nr_init_pbch_dmrs(PHY_VARS_gNB* gNB);
*/
void
nr_init_pdcch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint32_t
Nid
);
void
nr_init_pdsch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint8_t
nscid
,
uint32_t
Nid
);
void
nr_init_csi_rs
(
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
);
void
nr_init_csi_rs
(
const
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
);
void
nr_gold_pusch
(
PHY_VARS_gNB
*
gNB
,
int
nscid
,
uint32_t
nid
);
...
...
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
fc612275
...
...
@@ -68,6 +68,6 @@ void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue,
uint16_t
N_n_scid
,
uint8_t
n_scid
);
void
nr_init_csi_rs
(
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
);
void
nr_init_csi_rs
(
const
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
);
#endif
openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
View file @
fc612275
...
...
@@ -27,7 +27,7 @@
//#define NR_CSIRS_DEBUG
void
nr_init_csi_rs
(
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
)
{
void
nr_init_csi_rs
(
const
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
)
{
uint32_t
x1
,
x2
;
uint8_t
reset
;
int
csi_dmrs_init_length
=
((
fp
->
N_RB_DL
<<
4
)
>>
5
)
+
1
;
...
...
@@ -43,12 +43,20 @@ void nr_init_csi_rs(NR_DL_FRAME_PARMS *fp, uint32_t ***csi_rs, uint32_t Nid) {
}
}
void
nr_generate_csi_rs
(
NR_DL_FRAME_PARMS
frame_parms
,
void
nr_generate_csi_rs
(
const
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
dataF
,
int16_t
amp
,
nr_csi_rs_info_t
*
nr_csi_rs_info
,
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t
*
csi_params
,
int
slot
){
const
int16_t
amp
,
nr_csi_info_t
*
nr_csi_info
,
const
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t
*
csi_params
,
const
int
slot
,
uint8_t
*
N_cdm_groups
,
uint8_t
*
CDM_group_size
,
uint8_t
*
k_prime
,
uint8_t
*
l_prime
,
uint8_t
*
N_ports
,
uint8_t
*
j_cdm
,
uint8_t
*
k_overline
,
uint8_t
*
l_overline
)
{
#ifdef NR_CSIRS_DEBUG
LOG_I
(
NR_PHY
,
"csi_params->subcarrier_spacing = %i
\n
"
,
csi_params
->
subcarrier_spacing
);
...
...
@@ -67,11 +75,11 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
LOG_I
(
NR_PHY
,
"csi_params->power_control_offset_ss = %i
\n
"
,
csi_params
->
power_control_offset_ss
);
#endif
int
dataF_offset
=
slot
*
frame_parms
.
samples_per_slot_wCP
;
uint32_t
**
nr_gold_csi_rs
=
nr_csi_
rs_
info
->
nr_gold_csi_rs
[
slot
];
int
dataF_offset
=
slot
*
frame_parms
->
samples_per_slot_wCP
;
uint32_t
**
nr_gold_csi_rs
=
nr_csi_info
->
nr_gold_csi_rs
[
slot
];
//*8(max allocation per RB)*2(QPSK))
int
csi_rs_length
=
frame_parms
.
N_RB_DL
<<
4
;
int16_t
mod_csi
[
frame_parms
.
symbols_per_slot
][
csi_rs_length
>>
1
]
__attribute__
((
aligned
(
16
)));
int
csi_rs_length
=
frame_parms
->
N_RB_DL
<<
4
;
int16_t
mod_csi
[
frame_parms
->
symbols_per_slot
][
csi_rs_length
>>
1
]
__attribute__
((
aligned
(
16
)));
uint16_t
b
=
csi_params
->
freq_domain
;
uint16_t
n
,
p
,
k
,
l
,
mprime
,
na
,
kpn
;
uint8_t
size
,
ports
,
kprime
,
lprime
,
i
,
gs
;
...
...
@@ -81,14 +89,14 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
uint8_t
fi
=
0
;
double
rho
,
alpha
;
uint32_t
beta
=
amp
;
nr_csi_
rs_
info
->
csi_rs_generated_signal_bits
=
log2_approx
(
amp
);
nr_csi_info
->
csi_rs_generated_signal_bits
=
log2_approx
(
amp
);
AssertFatal
(
b
!=
0
,
"Invalid CSI frequency domain mapping: no bit selected in bitmap
\n
"
);
// if the scrambling id is not the one previously used to initialize we need to re-initialize the rs
if
(
csi_params
->
scramb_id
!=
nr_csi_
rs_
info
->
csi_gold_init
)
{
nr_csi_
rs_
info
->
csi_gold_init
=
csi_params
->
scramb_id
;
nr_init_csi_rs
(
&
frame_parms
,
nr_csi_rs
_info
->
nr_gold_csi_rs
,
csi_params
->
scramb_id
);
if
(
csi_params
->
scramb_id
!=
nr_csi_info
->
csi_gold_init
)
{
nr_csi_info
->
csi_gold_init
=
csi_params
->
scramb_id
;
nr_init_csi_rs
(
frame_parms
,
nr_csi
_info
->
nr_gold_csi_rs
,
csi_params
->
scramb_id
);
}
switch
(
csi_params
->
row
)
{
...
...
@@ -584,7 +592,7 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
}
}
uint16_t
start_sc
=
frame_parms
.
first_carrier_offset
;
uint16_t
start_sc
=
frame_parms
->
first_carrier_offset
;
// resource mapping according to 38.211 7.4.1.5.3
for
(
n
=
csi_params
->
start_rb
;
n
<
(
csi_params
->
start_rb
+
csi_params
->
nr_of_rbs
);
n
++
)
{
...
...
@@ -593,7 +601,7 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
for
(
int
s
=
0
;
s
<
gs
;
s
++
)
{
// loop over each CDM group size
p
=
s
+
j
[
ji
]
*
gs
;
// port index
for
(
kp
=
0
;
kp
<=
kprime
;
kp
++
)
{
// loop over frequency resource elements within a group
k
=
(
start_sc
+
(
n
*
NR_NB_SC_PER_RB
)
+
koverline
[
ji
]
+
kp
)
%
(
frame_parms
.
ofdm_symbol_size
);
// frequency index of current resource element
k
=
(
start_sc
+
(
n
*
NR_NB_SC_PER_RB
)
+
koverline
[
ji
]
+
kp
)
%
(
frame_parms
->
ofdm_symbol_size
);
// frequency index of current resource element
// wf according to tables 7.4.5.3-2 to 7.4.5.3-5
if
(
kp
==
0
)
wf
=
1
;
...
...
@@ -620,17 +628,17 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
// ZP CSI RS
if
(
csi_params
->
csi_type
==
2
)
{
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)]
=
0
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]
=
0
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)]
=
0
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]
=
0
;
}
else
{
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)]
=
(
beta
*
wt
*
wf
*
mod_csi
[
l
][
mprime
<<
1
])
>>
15
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]
=
(
beta
*
wt
*
wf
*
mod_csi
[
l
][(
mprime
<<
1
)
+
1
])
>>
15
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)]
=
(
beta
*
wt
*
wf
*
mod_csi
[
l
][
mprime
<<
1
])
>>
15
;
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]
=
(
beta
*
wt
*
wf
*
mod_csi
[
l
][(
mprime
<<
1
)
+
1
])
>>
15
;
}
#ifdef NR_CSIRS_DEBUG
printf
(
"l,k (%d,%d) seq. index %d
\t
port %d
\t
(%d,%d)
\n
"
,
l
,
k
,
mprime
,
p
+
3000
,
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)],
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
.
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]);
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
dataF_offset
)],
((
int16_t
*
)
dataF
[
p
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
dataF_offset
)]);
#endif
}
}
...
...
@@ -638,23 +646,25 @@ void nr_generate_csi_rs(NR_DL_FRAME_PARMS frame_parms,
}
}
}
nr_csi_rs_info
->
N_cdm_groups
=
size
;
nr_csi_rs_info
->
CDM_group_size
=
gs
;
nr_csi_rs_info
->
k
prime
=
kprime
;
nr_csi_rs_info
->
l
prime
=
lprime
;
nr_csi_rs_info
->
N_ports
=
ports
;
memcpy
(
nr_csi_rs_info
->
j
,
j
,
16
*
sizeof
(
uint8_t
));
memcpy
(
nr_csi_rs_info
->
k
overline
,
koverline
,
16
*
sizeof
(
uint8_t
));
memcpy
(
nr_csi_rs_info
->
l
overline
,
loverline
,
16
*
sizeof
(
uint8_t
));
if
(
N_cdm_groups
)
*
N_cdm_groups
=
size
;
if
(
CDM_group_size
)
*
CDM_group_size
=
gs
;
if
(
k_prime
)
*
k_
prime
=
kprime
;
if
(
l_prime
)
*
l_
prime
=
lprime
;
if
(
N_ports
)
*
N_ports
=
ports
;
if
(
j_cdm
)
memcpy
(
j_cdm
,
j
,
16
*
sizeof
(
uint8_t
));
if
(
k_overline
)
memcpy
(
k_
overline
,
koverline
,
16
*
sizeof
(
uint8_t
));
if
(
l_overline
)
memcpy
(
l_
overline
,
loverline
,
16
*
sizeof
(
uint8_t
));
#ifdef NR_CSIRS_DEBUG
LOG_I
(
NR_PHY
,
"nr_csi_rs_info->N_ports = %d
\n
"
,
nr_csi_rs_info
->
N_ports
);
LOG_I
(
NR_PHY
,
"nr_csi_rs_info->N_cdm_groups = %d
\n
"
,
nr_csi_rs_info
->
N_cdm_groups
);
LOG_I
(
NR_PHY
,
"nr_csi_rs_info->CDM_group_size = %d
\n
"
,
nr_csi_rs_info
->
CDM_group_size
);
LOG_I
(
NR_PHY
,
"nr_csi_rs_info->kprime = %d
\n
"
,
nr_csi_rs_info
->
kprime
);
LOG_I
(
NR_PHY
,
"nr_csi_rs_info->lprime = %d
\n
"
,
nr_csi_rs_info
->
lprime
);
for
(
int
ji
=
0
;
ji
<
nr_csi_rs_info
->
N_cdm_groups
;
ji
++
)
{
LOG_I
(
NR_PHY
,
"(CDM group %d) j = %d, koverline = %d, loverline = %d
\n
"
,
ji
,
nr_csi_rs_info
->
j
[
ji
],
nr_csi_rs_info
->
koverline
[
ji
],
nr_csi_rs_info
->
loverline
[
ji
]);
if
(
N_ports
)
LOG_I
(
NR_PHY
,
"nr_csi_info->N_ports = %d
\n
"
,
*
N_ports
);
if
(
N_cdm_groups
)
LOG_I
(
NR_PHY
,
"nr_csi_info->N_cdm_groups = %d
\n
"
,
*
N_cdm_groups
);
if
(
CDM_group_size
)
LOG_I
(
NR_PHY
,
"nr_csi_info->CDM_group_size = %d
\n
"
,
*
CDM_group_size
);
if
(
k_prime
)
LOG_I
(
NR_PHY
,
"nr_csi_info->kprime = %d
\n
"
,
*
k_prime
);
if
(
l_prime
)
LOG_I
(
NR_PHY
,
"nr_csi_info->lprime = %d
\n
"
,
*
l_prime
);
if
(
N_cdm_groups
)
{
for
(
int
ji
=
0
;
ji
<*
N_cdm_groups
;
ji
++
)
{
LOG_I
(
NR_PHY
,
"(CDM group %d) j = %d, koverline = %d, loverline = %d
\n
"
,
ji
,
j
[
ji
],
koverline
[
ji
],
loverline
[
ji
]);
}
}
#endif
}
openair1/PHY/NR_TRANSPORT/nr_dci.c
View file @
fc612275
...
...
@@ -111,9 +111,10 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
// DMRS length is per OFDM symbol
uint32_t
dmrs_length
=
n_rb
*
6
;
//2(QPSK)*3(per RB)*6(REG per CCE)
uint32_t
encoded_length
=
dci_pdu
->
AggregationLevel
*
108
;
//2(QPSK)*9(per RB)*6(REG per CCE)
LOG_D
(
PHY
,
"DL_DCI : rb_offset %d, nb_rb %d, DMRS length per symbol %d
\t
DCI encoded length %d (precoder_granularity %d,reg_mapping %d),Scrambling_Id %d,ScramblingRNTI %x,PayloadSizeBits %d
\n
"
,
rb_offset
,
n_rb
,
dmrs_length
,
encoded_length
,
pdcch_pdu_rel15
->
precoderGranularity
,
pdcch_pdu_rel15
->
CceRegMappingType
,
dci_pdu
->
ScramblingId
,
dci_pdu
->
ScramblingRNTI
,
dci_pdu
->
PayloadSizeBits
);
if
(
dci_pdu
->
RNTI
!=
0xFFFF
)
LOG_D
(
PHY
,
"DL_DCI : rb_offset %d, nb_rb %d, DMRS length per symbol %d
\t
DCI encoded length %d (precoder_granularity %d, reg_mapping %d), Scrambling_Id %d, ScramblingRNTI %x, PayloadSizeBits %d
\n
"
,
rb_offset
,
n_rb
,
dmrs_length
,
encoded_length
,
pdcch_pdu_rel15
->
precoderGranularity
,
pdcch_pdu_rel15
->
CceRegMappingType
,
dci_pdu
->
ScramblingId
,
dci_pdu
->
ScramblingRNTI
,
dci_pdu
->
PayloadSizeBits
);
dmrs_length
+=
rb_offset
*
6
;
// To accommodate more DMRS symbols in case of rb offset
/// DMRS QPSK modulation
...
...
@@ -122,11 +123,11 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
nr_modulation
(
gold_pdcch_dmrs
[
symb
],
dmrs_length
,
DMRS_MOD_ORDER
,
mod_dmrs
[
symb
]);
//Qm = 2 as DMRS is QPSK modulated
#ifdef DEBUG_PDCCH_DMRS
if
(
dci_pdu
->
RNTI
!=
0xFFFF
)
{
for
(
int
i
=
0
;
i
<
dmrs_length
>>
1
;
i
++
)
printf
(
"symb %d i %d %p gold seq 0x%08x mod_dmrs %d %d
\n
"
,
symb
,
i
,
&
gold_pdcch_dmrs
[
symb
][
i
>>
5
],
gold_pdcch_dmrs
[
symb
][
i
>>
5
],
mod_dmrs
[
symb
][
i
<<
1
],
mod_dmrs
[
symb
][(
i
<<
1
)
+
1
]
);
}
if
(
dci_pdu
->
RNTI
!=
0xFFFF
)
{
for
(
int
i
=
0
;
i
<
dmrs_length
>>
1
;
i
++
)
printf
(
"symb %d i %d %p gold seq 0x%08x mod_dmrs %d %d
\n
"
,
symb
,
i
,
&
gold_pdcch_dmrs
[
symb
][
i
>>
5
],
gold_pdcch_dmrs
[
symb
][
i
>>
5
],
mod_dmrs
[
symb
][
i
<<
1
],
mod_dmrs
[
symb
][(
i
<<
1
)
+
1
]
);
}
#endif
}
...
...
@@ -265,7 +266,6 @@ void nr_generate_dci_top(processingData_L1tx_t *msgTx,
int16_t
amp
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
for
(
int
i
=
0
;
i
<
msgTx
->
num_ul_pdcch
;
i
++
)
nr_generate_dci
(
msgTx
->
gNB
,
&
msgTx
->
ul_pdcch_pdu
[
i
].
pdcch_pdu
.
pdcch_pdu_rel15
,
txdataF
,
amp
,
frame_parms
,
slot
);
for
(
int
i
=
0
;
i
<
msgTx
->
num_dl_pdcch
;
i
++
)
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
View file @
fc612275
...
...
@@ -337,12 +337,20 @@ void init_prach_ru_list(RU_t *ru);
void
free_nr_ru_prach_entry
(
RU_t
*
ru
,
int
prach_id
);
uint8_t
get_nr_prach_duration
(
uint8_t
prach_format
);
void
nr_generate_csi_rs
(
NR_DL_FRAME_PARMS
frame_parms
,
void
nr_generate_csi_rs
(
const
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
dataF
,
int16_t
amp
,
nr_csi_rs_info_t
*
nr_csi_rs_info
,
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t
*
csi_params
,
int
slot
);
const
int16_t
amp
,
nr_csi_info_t
*
nr_csi_info
,
const
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t
*
csi_params
,
const
int
slot
,
uint8_t
*
N_cdm_groups
,
uint8_t
*
CDM_group_size
,
uint8_t
*
k_prime
,
uint8_t
*
l_prime
,
uint8_t
*
N_ports
,
uint8_t
*
j_cdm
,
uint8_t
*
k_overline
,
uint8_t
*
l_overline
);
void
free_nr_prach_entry
(
PHY_VARS_gNB
*
gNB
,
int
prach_id
);
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
fc612275
...
...
@@ -331,8 +331,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
corr
[
aa
][
l
].
r
+=
xr
[
aa
][
l
][
n
].
r
*
idft12_re
[
seq_index
][
n
]
+
xr
[
aa
][
l
][
n
].
i
*
idft12_im
[
seq_index
][
n
];
corr
[
aa
][
l
].
i
+=
xr
[
aa
][
l
][
n
].
r
*
idft12_im
[
seq_index
][
n
]
-
xr
[
aa
][
l
][
n
].
i
*
idft12_re
[
seq_index
][
n
];
}
corr
[
aa
][
l
].
r
>>=
31
;
corr
[
aa
][
l
].
i
>>=
31
;
corr
[
aa
][
l
].
r
>>=
31
;
corr
[
aa
][
l
].
i
>>=
31
;
}
}
LOG_D
(
PHY
,
"PUCCH IDFT[%d/%d] = (%ld,%ld)=>%f
\n
"
,
...
...
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
View file @
fc612275
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
fc612275
...
...
@@ -362,7 +362,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
nr_gold_pdsch
(
ue
,
i
,
ue
->
scramblingID_dlsch
[
i
]);
}
nr_init_csi_rs
(
fp
,
ue
->
nr_csi_
rs_
info
->
nr_gold_csi_rs
,
fp
->
Nid_cell
);
nr_init_csi_rs
(
fp
,
ue
->
nr_csi_info
->
nr_gold_csi_rs
,
fp
->
Nid_cell
);
// initialize the pusch dmrs
for
(
int
i
=
0
;
i
<
NR_NB_NSCID
;
i
++
)
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
fc612275
...
...
@@ -855,10 +855,6 @@ void construct_HhH_elements(int *ch0conj_ch0,
int32_t
*
after_mf_11
,
unsigned
short
nb_rb
);
void
squared_matrix_element
(
int32_t
*
Hh_h_00
,
int32_t
*
Hh_h_00_sq
,
unsigned
short
nb_rb
);
void
dlsch_channel_level_TM34_meas
(
int
*
ch00
,
int
*
ch01
,
int
*
ch10
,
...
...
@@ -885,19 +881,15 @@ void nr_dlsch_detection_mrc(int **rxdataF_comp,
unsigned
short
nb_rb
,
int
length
);
void
det_HhH
(
int32_t
*
after_mf_00
,
int32_t
*
after_mf_01
,
int32_t
*
after_mf_10
,
int32_t
*
after_mf_11
,
int32_t
*
det_fin_128
,
unsigned
short
nb_rb
);
void
numer
(
int32_t
*
Hh_h_00_sq
,
int32_t
*
Hh_h_01_sq
,
int32_t
*
Hh_h_10_sq
,
int32_t
*
Hh_h_11_sq
,
int32_t
*
num_fin
,
unsigned
short
nb_rb
);
void
nr_conjch0_mult_ch1
(
int
*
ch0
,
int
*
ch1
,
int32_t
*
ch0conj_ch1
,
unsigned
short
nb_rb
,
unsigned
char
output_shift0
);
void
nr_a_sum_b
(
__m128i
*
input_x
,
__m128i
*
input_y
,
unsigned
short
nb_rb
);
uint8_t
rank_estimation_tm3_tm4
(
int
*
dl_ch_estimates_00
,
int
*
dl_ch_estimates_01
,
...
...
openair1/PHY/defs_gNB.h
View file @
fc612275
...
...
@@ -765,8 +765,8 @@ typedef struct PHY_VARS_gNB_s {
/// SRS variables
nr_srs_info_t
*
nr_srs_info
[
NUMBER_OF_NR_SRS_MAX
];
/// CSI
-RS
variables
nr_csi_
rs_info_t
*
nr_csi_rs
_info
;
/// CSI variables
nr_csi_
info_t
*
nr_csi
_info
;
uint8_t
pbch_configured
;
char
gNB_generate_rar
;
...
...
openair1/PHY/defs_nr_UE.h
View file @
fc612275
...
...
@@ -878,8 +878,8 @@ typedef struct {
/// SRS variables
nr_srs_info_t
*
nr_srs_info
;
/// CSI
-RS
variables
nr_csi_
rs_info_t
*
nr_csi_rs
_info
;
/// CSI variables
nr_csi_
info_t
*
nr_csi
_info
;
//#if defined(UPGRADE_RAT_NR)
#if 1
...
...
openair1/PHY/defs_nr_common.h
View file @
fc612275
...
...
@@ -43,6 +43,7 @@
#define nr_slot_t lte_subframe_t
#define MAX_NUM_SUBCARRIER_SPACING 5
#define NR_MAX_OFDM_SYMBOL_SIZE 4096
#define NR_NB_SC_PER_RB 12
#define NR_NB_REG_PER_CCE 6
...
...
@@ -247,23 +248,13 @@ typedef struct {
}
nr_srs_info_t
;
typedef
struct
{
uint8_t
N_cdm_groups
;
uint8_t
CDM_group_size
;
uint8_t
kprime
;
uint8_t
lprime
;
uint8_t
N_ports
;
uint8_t
j
[
16
];
uint8_t
koverline
[
16
];
uint8_t
loverline
[
16
];
uint16_t
csi_gold_init
;
uint32_t
***
nr_gold_csi_rs
;
uint8_t
csi_rs_generated_signal_bits
;
int32_t
**
csi_rs_generated_signal
;
int32_t
**
csi_rs_received_signal
;
int32_t
***
csi_rs_ls_estimated_channel
;
int32_t
***
csi_rs_estimated_channel_freq
;
uint32_t
*
noise_power
;
}
nr_csi_rs_info_t
;
bool
csi_im_meas_computed
;
uint32_t
interference_plus_noise_power
;
}
nr_csi_info_t
;
typedef
struct
NR_DL_FRAME_PARMS
NR_DL_FRAME_PARMS
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
fc612275
...
...
@@ -172,7 +172,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
if
(
csirs
->
active
==
1
)
{
LOG_D
(
PHY
,
"CSI-RS generation started in frame %d.%d
\n
"
,
frame
,
slot
);
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t
*
csi_params
=
&
csirs
->
csirs_pdu
.
csi_rs_pdu_rel15
;
nr_generate_csi_rs
(
gNB
->
frame_parms
,
gNB
->
common_vars
.
txdataF
,
AMP
,
gNB
->
nr_csi_rs_info
,
csi_params
,
slot
);
nr_generate_csi_rs
(
&
gNB
->
frame_parms
,
gNB
->
common_vars
.
txdataF
,
AMP
,
gNB
->
nr_csi_info
,
csi_params
,
slot
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
csirs
->
active
=
0
;
}
}
...
...
openair1/SCHED_NR_UE/defs.h
View file @
fc612275
...
...
@@ -405,7 +405,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
NR_UE_DLSCH_t
*
dlsch1
,
uint16_t
n_pdus
,
UE_nr_rxtx_proc_t
*
proc
,
void
*
typeSpecific
);
void
*
typeSpecific
);
bool
nr_ue_dlsch_procedures
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
fc612275
...
...
@@ -393,7 +393,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
case
FAPI_NR_DL_CONFIG_TYPE_CSI_IM
:
csiim_config_pdu
=
&
dl_config
->
dl_config_list
[
i
].
csiim_config_pdu
.
csiim_config_rel15
;
memcpy
((
void
*
)
&
(
csiim_vars
->
csiim_config_pdu
),
(
void
*
)
csiim_config_pdu
,
sizeof
(
fapi_nr_dl_config_csiim_pdu_rel15_t
));
csi
rs
_vars
->
active
=
true
;
csi
im
_vars
->
active
=
true
;
break
;
case
FAPI_NR_DL_CONFIG_TYPE_CSI_RS
:
csirs_config_pdu
=
&
dl_config
->
dl_config_list
[
i
].
csirs_config_pdu
.
csirs_config_rel15
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
fc612275
...
...
@@ -121,9 +121,8 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
NR_UE_DLSCH_t
*
dlsch0
,
NR_UE_DLSCH_t
*
dlsch1
,
uint16_t
n_pdus
,
UE_nr_rxtx_proc_t
*
proc
,
void
*
typeSpecific
){
UE_nr_rxtx_proc_t
*
proc
,
void
*
typeSpecific
){
NR_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
...
...
@@ -176,6 +175,11 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
rx_ind
->
rx_indication_body
[
n_pdus
-
1
].
ssb_pdu
.
ssb_start_subcarrier
=
frame_parms
->
ssb_start_subcarrier
;
rx_ind
->
rx_indication_body
[
n_pdus
-
1
].
ssb_pdu
.
rsrp_dBm
=
ue
->
measurements
.
rsrp_dBm
[
gNB_id
];
break
;
case
FAPI_NR_CSIRS_IND
:
memcpy
(
&
rx_ind
->
rx_indication_body
[
n_pdus
-
1
].
csirs_measurements
,
(
fapi_nr_csirs_measurements_t
*
)
typeSpecific
,
sizeof
(
*
(
fapi_nr_csirs_measurements_t
*
)
typeSpecific
));
break
;
default:
break
;
}
...
...
@@ -1691,6 +1695,19 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
// do procedures for CSI-IM
if
((
ue
->
csiim_vars
[
gNB_id
])
&&
(
ue
->
csiim_vars
[
gNB_id
]
->
active
==
1
))
{
int
l_csiim
[
4
]
=
{
-
1
,
-
1
,
-
1
,
-
1
};
for
(
int
symb_idx
=
0
;
symb_idx
<
4
;
symb_idx
++
)
{
bool
nr_slot_fep_done
=
false
;
for
(
int
symb_idx2
=
0
;
symb_idx2
<
symb_idx
;
symb_idx2
++
)
{
if
(
l_csiim
[
symb_idx2
]
==
ue
->
csiim_vars
[
gNB_id
]
->
csiim_config_pdu
.
l_csiim
[
symb_idx
])
{
nr_slot_fep_done
=
true
;
}
}
l_csiim
[
symb_idx
]
=
ue
->
csiim_vars
[
gNB_id
]
->
csiim_config_pdu
.
l_csiim
[
symb_idx
];
if
(
nr_slot_fep_done
==
false
)
{
nr_slot_fep
(
ue
,
proc
,
ue
->
csiim_vars
[
gNB_id
]
->
csiim_config_pdu
.
l_csiim
[
symb_idx
],
nr_slot_rx
);
}
}
nr_ue_csi_im_procedures
(
ue
,
proc
,
gNB_id
);
ue
->
csiim_vars
[
gNB_id
]
->
active
=
0
;
}
...
...
openair1/SIMULATION/NR_PHY/dlschsim.c
View file @
fc612275
...
...
@@ -114,16 +114,16 @@ int main(int argc, char **argv)
//int run_initial_sync=0;
int
loglvl
=
OAILOG_WARNING
;
uint8_t
dlsch_threads
=
0
;
float
target_error_rate
=
0
.
01
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
uint16_t
nb_rb
=
50
;
uint8_t
Imcs
=
9
;
uint8_t
mcs_table
=
0
;
double
DS_TDL
=
.
03
;
cpuf
=
get_cpu_freq_GHz
();
char
gNBthreads
[
128
]
=
"n"
;
int
Tbslbrm
=
950984
;
float
target_error_rate
=
0
.
01
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
uint16_t
nb_rb
=
50
;
uint8_t
Imcs
=
9
;
uint8_t
mcs_table
=
0
;
double
DS_TDL
=
.
03
;
cpuf
=
get_cpu_freq_GHz
();
char
gNBthreads
[
128
]
=
"n"
;
int
Tbslbrm
=
950984
;
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
exit_fun
(
"[NR_DLSCHSIM] Error, configuration module init failed
\n
"
);
...
...
@@ -299,7 +299,7 @@ int main(int argc, char **argv)
break
;
case
'X'
:
strncpy
(
gNBthreads
,
optarg
,
sizeof
(
gNBthreads
));
strncpy
(
gNBthreads
,
optarg
,
sizeof
(
gNBthreads
)
-
1
);
gNBthreads
[
sizeof
(
gNBthreads
)
-
1
]
=
0
;
break
;
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
fc612275
...
...
@@ -670,7 +670,7 @@ int main(int argc, char **argv)
break
;
case
'X'
:
strncpy
(
gNBthreads
,
optarg
,
sizeof
(
gNBthreads
));
strncpy
(
gNBthreads
,
optarg
,
sizeof
(
gNBthreads
)
-
1
);
gNBthreads
[
sizeof
(
gNBthreads
)
-
1
]
=
0
;
break
;
...
...
openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
View file @
fc612275
...
...
@@ -40,4 +40,4 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
NR_UE_DLSCH_t
*
dlsch1
,
uint16_t
n_pdus
,
UE_nr_rxtx_proc_t
*
proc
,
void
*
typeSpecific
)
{}
void
*
typeSpecific
)
{}
openair2/GNB_APP/gnb_paramdef.h
View file @
fc612275
...
...
@@ -158,9 +158,9 @@ typedef enum {
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIME, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"", TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_UMONDEFAULTDRB, NULL, 0, uptr:NULL, defuintval:0,
TYPE_UINT, 0},
\
{GNB_CONFIG_STRING_UMONDEFAULTDRB, NULL, 0, uptr:NULL, defuintval:0,
TYPE_UINT, 0},
\
{GNB_CONFIG_STRING_FORCE256QAMOFF, GNB_CONFIG_HLP_FORCE256QAMOFF, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ENABLE_SDAP, GNB_CONFIG_HLP_STRING_ENABLE_SDAP, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0} \
{GNB_CONFIG_STRING_ENABLE_SDAP, GNB_CONFIG_HLP_STRING_ENABLE_SDAP, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0}
,
\
}
#define GNB_GNB_ID_IDX 0
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
View file @
fc612275
...
...
@@ -39,6 +39,7 @@
#include <stdbool.h>
#include "NR_SubcarrierSpacing.h"
#include "NR_CSI-ReportConfig.h"
#include "openair1/SCHED_NR_UE/harq_nr.h"
#define NR_SHORT_BSR_TABLE_SIZE 32
...
...
@@ -63,6 +64,7 @@
#define CCCH_PAYLOAD_SIZE_MAX 512
#define RAR_PAYLOAD_SIZE_MAX 128
#define MAX_BWP_SIZE 275
#define MAX_CSI_REPORTCONFIG 48
typedef
enum
frequency_range_e
{
FR1
=
0
,
...
...
@@ -512,5 +514,37 @@ typedef struct Type0_PDCCH_CSS_config_s {
bool
active
;
}
NR_Type0_PDCCH_CSS_config_t
;
typedef
struct
{
uint8_t
nb_ssbri_cri
;
uint8_t
cri_ssbri_bitlen
;
uint8_t
rsrp_bitlen
;
uint8_t
diff_rsrp_bitlen
;
}
L1_RSRP_bitlen_t
;
typedef
struct
{
uint8_t
ri_restriction
;
uint8_t
cri_bitlen
;
uint8_t
ri_bitlen
;
uint8_t
li_bitlen
[
8
];
uint8_t
pmi_x1_bitlen
[
8
];
uint8_t
pmi_x2_bitlen
[
8
];
uint8_t
cqi_bitlen
[
8
];
}
CSI_Meas_bitlen_t
;
typedef
struct
nr_csi_report
{
NR_CSI_ReportConfig__reportQuantity_PR
reportQuantity_type
;
long
periodicity
;
uint16_t
offset
;
long
**
SSB_Index_list
;
long
**
CSI_Index_list
;
// uint8_t nb_of_nzp_csi_report;
uint8_t
nb_of_csi_ssb_report
;
L1_RSRP_bitlen_t
CSI_report_bitlen
;
CSI_Meas_bitlen_t
csi_meas_bitlen
;
int
codebook_mode
;
int
N1
;
int
N2
;
}
nr_csi_report_t
;
#endif
/*__LAYER2_MAC_H__ */
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
fc612275
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
fc612275
...
...
@@ -105,7 +105,7 @@ uint8_t get_pusch_mcs_table(long *mcs_Table,
uint8_t
compute_nr_root_seq
(
NR_RACH_ConfigCommon_t
*
rach_config
,
uint8_t
nb_preambles
,
uint8_t
unpaired
,
frequency_range_t
);
frequency_range_t
);
int
ul_ant_bits
(
NR_DMRS_UplinkConfig_t
*
NR_DMRS_UplinkConfig
,
long
transformPrecoder
);
...
...
@@ -234,4 +234,36 @@ void nr_mac_gNB_rrc_ul_failure_reset(const module_id_t Mod_instP,
const
frame_t
frameP
,
const
sub_frame_t
subframeP
,
const
rnti_t
rntiP
);
uint8_t
number_of_bits_set
(
uint8_t
buf
);
void
compute_rsrp_bitlen
(
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
uint8_t
nb_resources
,
nr_csi_report_t
*
csi_report
);
uint8_t
compute_ri_bitlen
(
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
nr_csi_report_t
*
csi_report
);
void
compute_li_bitlen
(
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
uint8_t
ri_restriction
,
nr_csi_report_t
*
csi_report
);
void
get_n1n2_o1o2_singlepanel
(
int
*
n1
,
int
*
n2
,
int
*
o1
,
int
*
o2
,
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo
*
morethantwo
);
void
get_x1x2_bitlen_singlepanel
(
int
n1
,
int
n2
,
int
o1
,
int
o2
,
int
*
x1
,
int
*
x2
,
int
rank
,
int
codebook_mode
);
void
compute_pmi_bitlen
(
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
uint8_t
ri_restriction
,
nr_csi_report_t
*
csi_report
);
void
compute_cqi_bitlen
(
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
uint8_t
ri_restriction
,
nr_csi_report_t
*
csi_report
);
void
compute_csi_bitlen
(
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
nr_csi_report_t
*
csi_report_template
);
uint16_t
nr_get_csi_bitlen
(
nr_csi_report_t
*
csi_report_template
,
uint8_t
csi_report_id
);
#endif
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
fc612275
...
...
@@ -399,6 +399,11 @@ typedef struct {
/// measured SSB RSRP in dBm
short
ssb_rsrp_dBm
;
nr_csi_report_t
csi_report_template
[
MAX_CSI_REPORTCONFIG
];
/// measurements from CSI-RS
fapi_nr_csirs_measurements_t
csirs_measurements
;
/// Last NDI of UL HARQ processes
uint8_t
UL_ndi
[
NR_MAX_HARQ_PROCESSES
];
/// first ULTX of UL HARQ processes
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
fc612275
...
...
@@ -194,6 +194,7 @@ int nr_get_sf_retxBSRTimer(uint8_t retxBSR_Timer);
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
,
fapi_nr_dci_indication_pdu_t
*
dci_ind
);
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
);
int8_t
nr_ue_process_csirs_measurements
(
module_id_t
module_id
,
frame_t
frame
,
int
slot
,
fapi_nr_csirs_measurements_t
*
csirs_measurements
);
uint32_t
get_ssb_frame
(
uint32_t
test
);
...
...
@@ -213,6 +214,18 @@ uint8_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
NR_CSI_ResourceConfigId_t
csi_ResourceConfigId
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
);
uint8_t
get_csirs_RI_PMI_CQI_payload
(
NR_UE_MAC_INST_t
*
mac
,
PUCCH_sched_t
*
pucch
,
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
NR_CSI_ResourceConfigId_t
csi_ResourceConfigId
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
);
uint8_t
get_csirs_RSRP_payload
(
NR_UE_MAC_INST_t
*
mac
,
PUCCH_sched_t
*
pucch
,
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
NR_CSI_ResourceConfigId_t
csi_ResourceConfigId
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
);
uint8_t
nr_get_csi_payload
(
NR_UE_MAC_INST_t
*
mac
,
PUCCH_sched_t
*
pucch
,
int
csi_report_id
,
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
fc612275
...
...
@@ -1462,6 +1462,16 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
}
int8_t
nr_ue_process_csirs_measurements
(
module_id_t
module_id
,
frame_t
frame
,
int
slot
,
fapi_nr_csirs_measurements_t
*
csirs_measurements
)
{
LOG_D
(
NR_MAC
,
"(%d.%d) Received CSI-RS measurements
\n
"
,
frame
,
slot
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
memcpy
(
&
mac
->
csirs_measurements
,
csirs_measurements
,
sizeof
(
*
csirs_measurements
));
return
0
;
}
void
set_harq_status
(
NR_UE_MAC_INST_t
*
mac
,
uint8_t
pucch_id
,
uint8_t
harq_id
,
...
...
@@ -2564,13 +2574,17 @@ uint8_t nr_get_csi_payload(NR_UE_MAC_INST_t *mac,
case
NR_CSI_ReportConfig__reportQuantity_PR_ssb_Index_RSRP
:
n_csi_bits
=
get_ssb_rsrp_payload
(
mac
,
pucch
,
csi_reportconfig
,
csi_ResourceConfigId
,
csi_MeasConfig
);
break
;
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RSRP
:
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_PMI_CQI
:
n_csi_bits
=
get_csirs_RI_PMI_CQI_payload
(
mac
,
pucch
,
csi_reportconfig
,
csi_ResourceConfigId
,
csi_MeasConfig
);
break
;
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RSRP
:
n_csi_bits
=
get_csirs_RSRP_payload
(
mac
,
pucch
,
csi_reportconfig
,
csi_ResourceConfigId
,
csi_MeasConfig
);
break
;
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_i1
:
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_i1_CQI
:
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_CQI
:
case
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_LI_PMI_CQI
:
LOG_E
(
NR_MAC
,
"Measurement report
based on CSI-RS not available
\n
"
);
LOG_E
(
NR_MAC
,
"Measurement report
%d based on CSI-RS is not available
\n
"
,
csi_reportconfig
->
reportQuantity
.
present
);
break
;
default:
AssertFatal
(
1
==
0
,
"Invalid CSI report quantity type %d
\n
"
,
csi_reportconfig
->
reportQuantity
.
present
);
...
...
@@ -2658,6 +2672,122 @@ uint8_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
return
bits
;
}
uint8_t
get_csirs_RI_PMI_CQI_payload
(
NR_UE_MAC_INST_t
*
mac
,
PUCCH_sched_t
*
pucch
,
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
NR_CSI_ResourceConfigId_t
csi_ResourceConfigId
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
)
{
int
n_bits
=
0
;
uint32_t
temp_payload
=
0
;
for
(
int
csi_resourceidx
=
0
;
csi_resourceidx
<
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
count
;
csi_resourceidx
++
)
{
struct
NR_CSI_ResourceConfig
*
csi_resourceconfig
=
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
array
[
csi_resourceidx
];
if
(
csi_resourceconfig
->
csi_ResourceConfigId
==
csi_ResourceConfigId
)
{
for
(
int
csi_idx
=
0
;
csi_idx
<
csi_MeasConfig
->
nzp_CSI_RS_ResourceSetToAddModList
->
list
.
count
;
csi_idx
++
)
{
if
(
csi_MeasConfig
->
nzp_CSI_RS_ResourceSetToAddModList
->
list
.
array
[
csi_idx
]
->
nzp_CSI_ResourceSetId
==
*
(
csi_resourceconfig
->
csi_RS_ResourceSetList
.
choice
.
nzp_CSI_RS_SSB
->
nzp_CSI_RS_ResourceSetList
->
list
.
array
[
0
]))
{
nr_csi_report_t
*
csi_report
=
&
mac
->
csi_report_template
[
csi_reportconfig
->
reportConfigId
];
compute_csi_bitlen
(
csi_MeasConfig
,
mac
->
csi_report_template
);
n_bits
=
nr_get_csi_bitlen
(
mac
->
csi_report_template
,
csi_reportconfig
->
reportConfigId
);
int
cri_bitlen
=
csi_report
->
csi_meas_bitlen
.
cri_bitlen
;
int
ri_bitlen
=
csi_report
->
csi_meas_bitlen
.
ri_bitlen
;
int
pmi_x1_bitlen
=
csi_report
->
csi_meas_bitlen
.
pmi_x1_bitlen
[
mac
->
csirs_measurements
.
rank_indicator
];
int
pmi_x2_bitlen
=
csi_report
->
csi_meas_bitlen
.
pmi_x2_bitlen
[
mac
->
csirs_measurements
.
rank_indicator
];
int
cqi_bitlen
=
csi_report
->
csi_meas_bitlen
.
cqi_bitlen
[
mac
->
csirs_measurements
.
rank_indicator
];
int
padding_bitlen
=
n_bits
-
(
cri_bitlen
+
ri_bitlen
+
pmi_x1_bitlen
+
pmi_x2_bitlen
+
cqi_bitlen
);
// TODO: Improvements will be needed to cri_bitlen>0 and pmi_x1_bitlen>0
temp_payload
=
(
mac
->
csirs_measurements
.
rank_indicator
<<
(
cri_bitlen
+
cqi_bitlen
+
pmi_x2_bitlen
+
padding_bitlen
+
pmi_x1_bitlen
))
|
(
mac
->
csirs_measurements
.
i1
<<
(
cri_bitlen
+
cqi_bitlen
+
pmi_x2_bitlen
))
|
(
mac
->
csirs_measurements
.
i2
<<
(
cri_bitlen
+
cqi_bitlen
))
|
(
mac
->
csirs_measurements
.
cqi
<<
cri_bitlen
)
|
0
;
reverse_n_bits
((
uint8_t
*
)
&
temp_payload
,
n_bits
);
LOG_D
(
NR_MAC
,
"cri_bitlen = %d
\n
"
,
cri_bitlen
);
LOG_D
(
NR_MAC
,
"ri_bitlen = %d
\n
"
,
ri_bitlen
);
LOG_D
(
NR_MAC
,
"pmi_x1_bitlen = %d
\n
"
,
pmi_x1_bitlen
);
LOG_D
(
NR_MAC
,
"pmi_x2_bitlen = %d
\n
"
,
pmi_x2_bitlen
);
LOG_D
(
NR_MAC
,
"cqi_bitlen = %d
\n
"
,
cqi_bitlen
);
LOG_D
(
NR_MAC
,
"csi_part1_payload = 0x%x
\n
"
,
temp_payload
);
LOG_D
(
NR_MAC
,
"n_bits = %d
\n
"
,
n_bits
);
LOG_D
(
NR_MAC
,
"csi_part1_payload = 0x%x
\n
"
,
temp_payload
);
break
;
}
}
}
}
pucch
->
csi_part1_payload
=
temp_payload
;
return
n_bits
;
}
uint8_t
get_csirs_RSRP_payload
(
NR_UE_MAC_INST_t
*
mac
,
PUCCH_sched_t
*
pucch
,
struct
NR_CSI_ReportConfig
*
csi_reportconfig
,
NR_CSI_ResourceConfigId_t
csi_ResourceConfigId
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
)
{
int
n_bits
=
0
;
uint32_t
temp_payload
=
0
;
for
(
int
csi_resourceidx
=
0
;
csi_resourceidx
<
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
count
;
csi_resourceidx
++
)
{
struct
NR_CSI_ResourceConfig
*
csi_resourceconfig
=
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
array
[
csi_resourceidx
];
if
(
csi_resourceconfig
->
csi_ResourceConfigId
==
csi_ResourceConfigId
)
{
for
(
int
csi_idx
=
0
;
csi_idx
<
csi_MeasConfig
->
nzp_CSI_RS_ResourceSetToAddModList
->
list
.
count
;
csi_idx
++
)
{
if
(
csi_MeasConfig
->
nzp_CSI_RS_ResourceSetToAddModList
->
list
.
array
[
csi_idx
]
->
nzp_CSI_ResourceSetId
==
*
(
csi_resourceconfig
->
csi_RS_ResourceSetList
.
choice
.
nzp_CSI_RS_SSB
->
nzp_CSI_RS_ResourceSetList
->
list
.
array
[
0
]))
{
nr_csi_report_t
*
csi_report
=
&
mac
->
csi_report_template
[
csi_reportconfig
->
reportConfigId
];
compute_csi_bitlen
(
csi_MeasConfig
,
mac
->
csi_report_template
);
n_bits
=
nr_get_csi_bitlen
(
mac
->
csi_report_template
,
csi_reportconfig
->
reportConfigId
);
int
cri_ssbri_bitlen
=
csi_report
->
CSI_report_bitlen
.
cri_ssbri_bitlen
;
int
rsrp_bitlen
=
csi_report
->
CSI_report_bitlen
.
rsrp_bitlen
;
int
diff_rsrp_bitlen
=
csi_report
->
CSI_report_bitlen
.
diff_rsrp_bitlen
;
if
(
cri_ssbri_bitlen
>
0
)
{
LOG_E
(
NR_MAC
,
"Implementation for cri_ssbri_bitlen>0 is not supported yet!
\n
"
);;
}
// TODO: Improvements will be needed to cri_ssbri_bitlen>0
// TS 38.133 - Table 10.1.6.1-1
int
rsrp_dBm
=
mac
->
csirs_measurements
.
rsrp_dBm
;
if
(
rsrp_dBm
<
-
140
)
{
temp_payload
=
16
;
}
else
if
(
rsrp_dBm
>
-
44
)
{
temp_payload
=
113
;
}
else
{
temp_payload
=
mac
->
csirs_measurements
.
rsrp_dBm
+
157
;
}
reverse_n_bits
((
uint8_t
*
)
&
temp_payload
,
n_bits
);
LOG_D
(
NR_MAC
,
"cri_ssbri_bitlen = %d
\n
"
,
cri_ssbri_bitlen
);
LOG_D
(
NR_MAC
,
"rsrp_bitlen = %d
\n
"
,
rsrp_bitlen
);
LOG_D
(
NR_MAC
,
"diff_rsrp_bitlen = %d
\n
"
,
diff_rsrp_bitlen
);
LOG_D
(
NR_MAC
,
"n_bits = %d
\n
"
,
n_bits
);
LOG_D
(
NR_MAC
,
"csi_part1_payload = 0x%x
\n
"
,
temp_payload
);
break
;
}
}
}
}
pucch
->
csi_part1_payload
=
temp_payload
;
return
n_bits
;
}
// returns index from RSRP
// according to Table 10.1.6.1-1 in 38.133
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
fc612275
...
...
@@ -927,8 +927,6 @@ void nr_schedule_ue_spec(module_id_t module_id,
if
(
!
is_xlsch_in_slot
(
gNB_mac
->
dlsch_slot_bitmap
[
slot
/
64
],
slot
))
return
;
//if (slot==7 || slot == 17) return;
/* PREPROCESSOR */
gNB_mac
->
pre_processor_dl
(
module_id
,
frame
,
slot
);
const
int
CC_id
=
0
;
...
...
@@ -1317,7 +1315,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
lcid
<
4
?
"DCCH"
:
"DTCH"
,
lcid
,
ndata
,
bufEnd
-
buf
-
+
sizeof
(
NR_MAC_SUBHEADER_LONG
));
bufEnd
-
buf
-
sizeof
(
NR_MAC_SUBHEADER_LONG
));
if
(
len
==
0
)
break
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
fc612275
...
...
@@ -1436,7 +1436,6 @@ void set_r_pucch_parms(int rsetindex,
*
start_symbol_index
=
default_pucch_firstsymb
[
rsetindex
];
}
void
prepare_dci
(
const
NR_CellGroupConfig_t
*
CellGroup
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
nr_dci_format_t
format
,
...
...
@@ -2386,7 +2385,7 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
CellGroup
->
spCellConfig
->
spCellConfigDedicated
&&
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
&&
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
)
{
compute_csi_bitlen
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
,
UE
);
compute_csi_bitlen
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
,
UE
->
csi_report_template
);
}
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
...
...
@@ -3019,7 +3018,7 @@ void nr_mac_update_timers(module_id_t module_id,
cg
->
spCellConfig
->
spCellConfigDedicated
&&
cg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
&&
cg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
)
{
compute_csi_bitlen
(
cg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
,
UE
);
compute_csi_bitlen
(
cg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
,
UE
->
csi_report_template
);
}
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
fc612275
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
fc612275
...
...
@@ -336,38 +336,41 @@ int nr_process_mac_pdu( instance_t module_idP,
case
UL_SCH_LCID_DTCH
...
(
UL_SCH_LCID_DTCH
+
28
):
// check if LCID is valid at current time.
if
(
!
get_mac_len
(
pduP
,
pdu_len
,
&
mac_len
,
&
mac_subheader_len
))
return
0
;
if
(
!
get_mac_len
(
pduP
,
pdu_len
,
&
mac_len
,
&
mac_subheader_len
))
{
return
0
;
}
LOG_D
(
NR_MAC
,
"[UE %04x] %d.%d : ULSCH -> UL-%s %d (gNB %ld, %d bytes)
\n
"
,
UE
->
rnti
,
frameP
,
slot
,
rx_lcid
<
4
?
"DCCH"
:
"DTCH"
,
rx_lcid
,
module_idP
,
mac_len
);
UE
->
mac_stats
.
ul
.
lc_bytes
[
rx_lcid
]
+=
mac_len
;
mac_rlc_data_ind
(
module_idP
,
UE
->
rnti
,
module_idP
,
frameP
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
rx_lcid
,
(
char
*
)(
pduP
+
mac_subheader_len
),
mac_len
,
1
,
NULL
);
/* Updated estimated buffer when receiving data */
if
(
sched_ctrl
->
estimated_ul_buffer
>=
mac_len
)
sched_ctrl
->
estimated_ul_buffer
-=
mac_len
;
else
sched_ctrl
->
estimated_ul_buffer
=
0
;
break
;
LOG_D
(
NR_MAC
,
"[UE %04x] %d.%d : ULSCH -> UL-%s %d (gNB %ld, %d bytes)
\n
"
,
UE
->
rnti
,
frameP
,
slot
,
rx_lcid
<
4
?
"DCCH"
:
"DTCH"
,
rx_lcid
,
module_idP
,
mac_len
);
UE
->
mac_stats
.
ul
.
lc_bytes
[
rx_lcid
]
+=
mac_len
;
mac_rlc_data_ind
(
module_idP
,
UE
->
rnti
,
module_idP
,
frameP
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
rx_lcid
,
(
char
*
)(
pduP
+
mac_subheader_len
),
mac_len
,
1
,
NULL
);
/* Updated estimated buffer when receiving data */
if
(
sched_ctrl
->
estimated_ul_buffer
>=
mac_len
)
{
sched_ctrl
->
estimated_ul_buffer
-=
mac_len
;
}
else
{
sched_ctrl
->
estimated_ul_buffer
=
0
;
}
break
;
default:
LOG_E
(
NR_MAC
,
"Received unknown MAC header (LCID = 0x%02x)
\n
"
,
rx_lcid
);
...
...
@@ -402,7 +405,7 @@ int nr_process_mac_pdu( instance_t module_idP,
return
0
;
}
void
abort_nr_ul_harq
(
NR_UE_info_t
*
UE
,
int8_t
harq_pid
)
void
abort_nr_ul_harq
(
NR_UE_info_t
*
UE
,
int8_t
harq_pid
)
{
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
NR_UE_ul_harq_t
*
harq
=
&
sched_ctrl
->
ul_harq_processes
[
harq_pid
];
...
...
@@ -546,7 +549,6 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
else
{
LOG_D
(
NR_MAC
,
"[UE %04x] Detected DTX : increasing UE TX power
\n
"
,
UE
->
rnti
);
UE_scheduling_control
->
tpc0
=
1
;
}
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
...
...
@@ -756,7 +758,6 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
return
;
}
LOG_D
(
NR_MAC
,
"Random Access %i Msg3 CRC did not pass)
\n
"
,
i
);
ra
->
msg3_round
++
;
...
...
@@ -846,10 +847,8 @@ static bool nr_UE_is_to_be_scheduled(const NR_ServingCellConfigCommon_t *scc,
const
int
n
=
nr_slots_per_frame
[
*
scc
->
ssbSubcarrierSpacing
];
const
int
now
=
frame
*
n
+
slot
;
const
NR_UE_sched_ctrl_t
*
sched_ctrl
=&
UE
->
UE_sched_ctrl
;
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
int
num_slots_per_period
;
...
...
@@ -1071,7 +1070,7 @@ static int comparator(const void *p, const void *q) {
void
pf_ul
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
,
NR_UE_info_t
*
UE_list
[],
NR_UE_info_t
*
UE_list
[],
int
max_num_ue
,
int
n_rb_sched
,
uint16_t
*
rballoc_mask
)
{
...
...
@@ -1132,10 +1131,11 @@ void pf_ul(module_id_t module_id,
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
remainUEs
--
;
// we have filled all with mandatory retransmissions
// no need to schedule new transmissions
if
(
remainUEs
==
0
)
// we have filled all with mandatory retransmissions
// no need to schedule new transmissions
return
;
return
;
continue
;
}
const
int
B
=
max
(
0
,
sched_ctrl
->
estimated_ul_buffer
-
sched_ctrl
->
sched_ul_bytes
);
...
...
@@ -1143,9 +1143,10 @@ void pf_ul(module_id_t module_id,
const
bool
do_sched
=
nr_UE_is_to_be_scheduled
(
scc
,
0
,
UE
,
sched_pusch
->
frame
,
sched_pusch
->
slot
,
nrmac
->
ulsch_max_frame_inactivity
);
LOG_D
(
NR_MAC
,
"pf_ul: do_sched UE %04x => %s
\n
"
,
UE
->
rnti
,
do_sched
?
"yes"
:
"no"
);
if
((
B
==
0
&&
!
do_sched
)
||
(
sched_ctrl
->
rrc_processing_timer
>
0
))
if
((
B
==
0
&&
!
do_sched
)
||
(
sched_ctrl
->
rrc_processing_timer
>
0
))
{
continue
;
}
const
NR_bler_options_t
*
bo
=
&
nrmac
->
ul_bler
;
const
int
max_mcs
=
bo
->
max_mcs
;
/* no per-user maximum MCS yet */
sched_pusch
->
mcs
=
get_mcs_from_bler
(
bo
,
stats
,
&
UE
->
UE_sched_ctrl
.
ul_bler_stats
,
max_mcs
,
frame
);
...
...
@@ -1158,12 +1159,12 @@ void pf_ul(module_id_t module_id,
const
uint32_t
Y
=
get_Y
(
sched_ctrl
->
search_space
,
slot
,
UE
->
rnti
);
uint8_t
nr_of_candidates
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
// for now taking the lowest value among the available aggregation levels
find_aggregation_candidates
(
&
sched_ctrl
->
aggregation_level
,
&
nr_of_candidates
,
sched_ctrl
->
search_space
,
1
<<
i
);
if
(
nr_of_candidates
>
0
)
break
;
// for now taking the lowest value among the available aggregation levels
find_aggregation_candidates
(
&
sched_ctrl
->
aggregation_level
,
&
nr_of_candidates
,
sched_ctrl
->
search_space
,
1
<<
i
);
if
(
nr_of_candidates
>
0
)
break
;
}
int
CCEIndex
=
find_pdcch_candidate
(
RC
.
nrmac
[
module_id
],
CC_id
,
...
...
@@ -1172,18 +1173,19 @@ void pf_ul(module_id_t module_id,
&
sched_ctrl
->
sched_pdcch
,
sched_ctrl
->
coreset
,
Y
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d no free CCE for UL DCI UE %04x (BSR 0)
\n
"
,
frame
,
slot
,
UE
->
rnti
);
continue
;
LOG_D
(
NR_MAC
,
"%4d.%2d no free CCE for UL DCI UE %04x (BSR 0)
\n
"
,
frame
,
slot
,
UE
->
rnti
);
continue
;
}
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
remainUEs
--
;
// we have filled all with mandatory retransmissions
// no need to schedule new transmissions
if
(
remainUEs
==
0
)
// we have filled all with mandatory retransmissions
// no need to schedule new transmissions
return
;
return
;
/* Save PUSCH field */
/* we want to avoid a lengthy deduction of DMRS and other parameters in
...
...
@@ -1278,7 +1280,7 @@ void pf_ul(module_id_t module_id,
sched_ctrl
->
search_space
,
1
<<
i
);
if
(
nr_of_candidates
>
0
)
break
;
break
;
}
int
CCEIndex
=
find_pdcch_candidate
(
RC
.
nrmac
[
module_id
],
CC_id
,
...
...
@@ -1379,8 +1381,8 @@ void pf_ul(module_id_t module_id,
n_rb_sched
-=
sched_pusch
->
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_ctrl
->
sched_pusch
.
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
^=
slbitmap
;
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
remainUEs
--
;
iterator
++
;
...
...
@@ -1400,8 +1402,8 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
const
int
mu
=
scc
?
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
:
scc_sib1
->
uplinkConfigCommon
->
initialUplinkBWP
.
genericParameters
.
subcarrierSpacing
;
// no UEs
if
(
nr_mac
->
UE_info
.
list
[
0
]
==
NULL
)
// no UEs
return
false
;
const
int
CC_id
=
0
;
...
...
@@ -1448,8 +1450,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
UE_iterator
(
nr_mac
->
UE_info
.
list
,
UE2
)
{
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE2
->
UE_sched_ctrl
;
AssertFatal
(
K2
==
get_K2
(
scc
,
scc_sib1
,
sched_ctrl
->
active_ubwp
,
tda
,
mu
),
"Different K2, %d(UE%d) != %ld(UE%04x)
\n
"
,
K2
,
0
,
get_K2
(
scc
,
scc_sib1
,
sched_ctrl
->
active_ubwp
,
tda
,
mu
),
UE2
->
rnti
);
"Different K2, %d(UE%d) != %ld(UE%04x)
\n
"
,
K2
,
0
,
get_K2
(
scc
,
scc_sib1
,
sched_ctrl
->
active_ubwp
,
tda
,
mu
),
UE2
->
rnti
);
sched_ctrl
->
sched_pusch
.
slot
=
sched_slot
;
sched_ctrl
->
sched_pusch
.
frame
=
sched_frame
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
fc612275
...
...
@@ -201,7 +201,7 @@ void config_uldci(const NR_SIB1_t *sib1,
int
n_ubwp
,
int
bwp_id
);
void
nr_schedule_pucch
(
gNB_MAC_INST
*
nrmac
,
void
nr_schedule_pucch
(
gNB_MAC_INST
*
nrmac
,
frame_t
frameP
,
sub_frame_t
slotP
);
...
...
@@ -216,12 +216,12 @@ void nr_csi_meas_reporting(int Mod_idP,
frame_t
frameP
,
sub_frame_t
slotP
);
int
nr_acknack_scheduling
(
int
Mod_idP
,
NR_UE_info_t
*
UE
,
frame_t
frameP
,
sub_frame_t
slotP
,
int
r_pucch
,
int
do_common
);
int
nr_acknack_scheduling
(
int
Mod_idP
,
NR_UE_info_t
*
UE
,
frame_t
frameP
,
sub_frame_t
slotP
,
int
r_pucch
,
int
do_common
);
void
get_pdsch_to_harq_feedback
(
NR_UE_info_t
*
,
int
bwp_id
,
...
...
@@ -410,8 +410,6 @@ void nr_mac_remove_ra_rnti(module_id_t mod_id, rnti_t rnti);
int
nr_get_default_pucch_res
(
int
pucch_ResourceCommon
);
void
compute_csi_bitlen
(
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
NR_UE_info_t
*
UE
);
int
get_dlscs
(
nfapi_nr_config_request_t
*
cfg
);
int
get_ulscs
(
nfapi_nr_config_request_t
*
cfg
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
fc612275
...
...
@@ -509,38 +509,6 @@ struct CSI_Report {
#define MAX_SR_BITLEN 8
typedef
struct
{
uint8_t
nb_ssbri_cri
;
uint8_t
cri_ssbri_bitlen
;
uint8_t
rsrp_bitlen
;
uint8_t
diff_rsrp_bitlen
;
}
L1_RSRP_bitlen_t
;
typedef
struct
{
uint8_t
ri_restriction
;
uint8_t
cri_bitlen
;
uint8_t
ri_bitlen
;
uint8_t
li_bitlen
[
8
];
uint8_t
pmi_x1_bitlen
[
8
];
uint8_t
pmi_x2_bitlen
[
8
];
uint8_t
cqi_bitlen
[
8
];
}
CSI_Meas_bitlen_t
;
typedef
struct
nr_csi_report
{
NR_CSI_ReportConfig__reportQuantity_PR
reportQuantity_type
;
long
periodicity
;
uint16_t
offset
;
long
**
SSB_Index_list
;
long
**
CSI_Index_list
;
// uint8_t nb_of_nzp_csi_report;
uint8_t
nb_of_csi_ssb_report
;
L1_RSRP_bitlen_t
CSI_report_bitlen
;
CSI_Meas_bitlen_t
csi_meas_bitlen
;
int
codebook_mode
;
int
N1
;
int
N2
;
}
nr_csi_report_t
;
/*! As per the spec 38.212 and table: 6.3.1.1.2-12 in a single UCI sequence we can have multiple CSI_report
the number of CSI_report will depend on number of CSI resource sets that are configured in CSI-ResourceConfig RRC IE
From spec 38.331 from the IE CSI-ResourceConfig for SSB RSRP reporting we can configure only one resource set
...
...
@@ -703,7 +671,6 @@ typedef struct NR_bler_options {
}
NR_bler_options_t
;
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
#define MAX_CSI_REPORTCONFIG 48
typedef
struct
{
rnti_t
rnti
;
/// scheduling control info
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
fc612275
...
...
@@ -1103,6 +1103,10 @@ int8_t handle_dlsch(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
return
0
;
}
int8_t
handle_csirs_measurements
(
module_id_t
module_id
,
frame_t
frame
,
int
slot
,
fapi_nr_csirs_measurements_t
*
csirs_measurements
)
{
return
nr_ue_process_csirs_measurements
(
module_id
,
frame
,
slot
,
csirs_measurements
);
}
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
);
...
...
@@ -1228,7 +1232,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
(
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
ssb_pdu
.
ssb_length
,
(
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
ssb_pdu
.
ssb_start_subcarrier
,
(
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
ssb_pdu
.
cell_id
))
<<
FAPI_NR_RX_PDU_TYPE_SSB
;
free
((
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
ssb_pdu
.
pdu
);
free
((
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
ssb_pdu
.
pdu
);
break
;
case
FAPI_NR_RX_PDU_TYPE_SIB
:
ret_mask
|=
(
handle_bcch_dlsch
(
dl_info
->
module_id
,
...
...
@@ -1243,6 +1247,12 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
case
FAPI_NR_RX_PDU_TYPE_RAR
:
ret_mask
|=
(
handle_dlsch
(
dl_info
,
ul_time_alignment
,
i
))
<<
FAPI_NR_RX_PDU_TYPE_RAR
;
break
;
case
FAPI_NR_CSIRS_IND
:
ret_mask
|=
(
handle_csirs_measurements
(
dl_info
->
module_id
,
dl_info
->
frame
,
dl_info
->
slot
,
&
(
dl_info
->
rx_ind
->
rx_indication_body
+
i
)
->
csirs_measurements
))
<<
FAPI_NR_CSIRS_IND
;
break
;
default:
break
;
}
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
fc612275
...
...
@@ -548,7 +548,7 @@ void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay){
pusch_timedomainresourceallocation
->
k2
=
CALLOC
(
1
,
sizeof
(
long
));
*
pusch_timedomainresourceallocation
->
k2
=
k2
;
pusch_timedomainresourceallocation
->
mappingType
=
NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeB
;
pusch_timedomainresourceallocation
->
startSymbolAndLength
=
get_SLIV
(
0
,
13
);
pusch_timedomainresourceallocation
->
startSymbolAndLength
=
get_SLIV
(
0
,
13
);
ASN_SEQUENCE_ADD
(
&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
->
list
,
pusch_timedomainresourceallocation
);
if
(
frame_type
==
TDD
)
{
...
...
@@ -780,7 +780,8 @@ void scheduling_request_config(NR_ServingCellConfigCommon_t *scc,
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
schedulingRequestResourceToAddModList
->
list
,
schedulingRequestResourceConfig
);
}
void
set_dl_mcs_table
(
int
scs
,
NR_UE_NR_Capability_t
*
cap
,
void
set_dl_mcs_table
(
int
scs
,
NR_UE_NR_Capability_t
*
cap
,
NR_SpCellConfig_t
*
SpCellConfig
,
NR_BWP_DownlinkDedicated_t
*
bwp_Dedicated
,
NR_ServingCellConfigCommon_t
*
scc
)
{
...
...
@@ -820,7 +821,7 @@ void set_dl_mcs_table(int scs, NR_UE_NR_Capability_t *cap,
if
(
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
==
NULL
)
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
=
calloc
(
1
,
sizeof
(
*
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
));
*
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
=
NR_PDSCH_Config__mcs_Table_qam256
;
// set table 2 in correct entry in SpCellConfig->spCellConfigDedicated->csi_MeasConfig->csi_ReportConfigToAddModList->list
// set table 2 in correct entry in SpCellConfig->spCellConfigDedicated->csi_MeasConfig->csi_ReportConfigToAddModList->list
AssertFatal
(
SpCellConfig
!=
NULL
,
"SpCellConfig shouldn't be null
\n
"
);
AssertFatal
(
SpCellConfig
->
spCellConfigDedicated
!=
NULL
,
"SpCellConfigDedicated shouldn't be null
\n
"
);
if
(
SpCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
&&
...
...
openair2/RRC/NR/nr_rrc_config.h
View file @
fc612275
...
...
@@ -138,7 +138,8 @@ void config_srs(NR_SetupRelease_SRS_Config_t *setup_release_srs_Config,
const
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
const
int
uid
,
const
int
do_srs
);
void
set_dl_mcs_table
(
int
scs
,
NR_UE_NR_Capability_t
*
cap
,
void
set_dl_mcs_table
(
int
scs
,
NR_UE_NR_Capability_t
*
cap
,
NR_SpCellConfig_t
*
SpCellConfig
,
NR_BWP_DownlinkDedicated_t
*
bwp_Dedicated
,
NR_ServingCellConfigCommon_t
*
scc
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
fc612275
...
...
@@ -675,7 +675,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
}
if
(
samples_received
==
nsamps
)
s
->
wait_for_first_pps
=
0
;
// bring RX data into 12 LSBs for softmodem RX
// bring RX data into 12 LSBs for softmodem RX
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
{
#if defined(__x86_64__) || defined(__i386__)
...
...
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