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
wangjie
OpenXG-RAN
Commits
d4984dc7
Commit
d4984dc7
authored
Sep 24, 2020
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_MAC_SSB_RO_UE_IDCC' into NR_MAC_SSB_RO_GlobalEdge
parents
f07ef482
b0b5825c
Changes
14
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
928 additions
and
163 deletions
+928
-163
common/utils/asn1_conversions.h
common/utils/asn1_conversions.h
+2
-2
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+2
-1
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+3
-0
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+1
-1
openair1/PHY/MODULATION/slot_fep_nr.c
openair1/PHY/MODULATION/slot_fep_nr.c
+8
-2
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+3
-12
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+685
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+33
-0
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+6
-3
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+2
-1
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+88
-27
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+93
-112
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+1
-1
No files found.
common/utils/asn1_conversions.h
View file @
d4984dc7
...
@@ -101,11 +101,11 @@ static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
...
@@ -101,11 +101,11 @@ static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
shift
=
((
asn
->
size
-
1
)
*
8
)
-
asn
->
bits_unused
;
shift
=
((
asn
->
size
-
1
)
*
8
)
-
asn
->
bits_unused
;
for
(
index
=
0
;
index
<
(
asn
->
size
-
1
);
index
++
)
{
for
(
index
=
0
;
index
<
(
asn
->
size
-
1
);
index
++
)
{
result
|=
asn
->
buf
[
index
]
<<
shift
;
result
|=
((
uint64_t
)
asn
->
buf
[
index
])
<<
shift
;
shift
-=
8
;
shift
-=
8
;
}
}
result
|=
asn
->
buf
[
index
]
>>
asn
->
bits_unused
;
result
|=
((
uint64_t
)
asn
->
buf
[
index
])
>>
asn
->
bits_unused
;
return
result
;
return
result
;
}
}
...
...
executables/nr-uesoftmodem.c
View file @
d4984dc7
...
@@ -693,6 +693,7 @@ int main( int argc, char **argv ) {
...
@@ -693,6 +693,7 @@ int main( int argc, char **argv ) {
}
}
init_symbol_rotation
(
frame_parms
[
CC_id
],
frame_parms
[
CC_id
]
->
dl_CarrierFreq
);
init_symbol_rotation
(
frame_parms
[
CC_id
],
frame_parms
[
CC_id
]
->
dl_CarrierFreq
);
init_nr_ue_vars
(
UE
[
CC_id
],
frame_parms
[
CC_id
],
0
,
abstraction_flag
);
init_nr_ue_vars
(
UE
[
CC_id
],
frame_parms
[
CC_id
],
0
,
abstraction_flag
);
UE
[
CC_id
]
->
mac_enabled
=
1
;
UE
[
CC_id
]
->
mac_enabled
=
1
;
...
@@ -751,7 +752,7 @@ int main( int argc, char **argv ) {
...
@@ -751,7 +752,7 @@ int main( int argc, char **argv ) {
UE
[
CC_id
]
->
N_TA_offset
=
(
int
)(
N_TA_offset
*
factor
);
UE
[
CC_id
]
->
N_TA_offset
=
(
int
)(
N_TA_offset
*
factor
);
LOG_I
(
PHY
,
"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d)
\n
"
,
UE
[
CC_id
]
->
Mod_id
,
UE
[
CC_id
]
->
N_TA_offset
,
factor
,
UE
[
CC_id
]
->
frame_parms
.
ul_CarrierFreq
,
N_RB
);
LOG_I
(
PHY
,
"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d)
\n
"
,
UE
[
CC_id
]
->
Mod_id
,
UE
[
CC_id
]
->
N_TA_offset
,
factor
,
UE
[
CC_id
]
->
frame_parms
.
ul_CarrierFreq
,
N_RB
);
}
}
}
}
// printf("tx_max_power = %d -> amp %d\n",tx_max_power[0],get_tx_amp(tx_max_poHwer,tx_max_power));
// printf("tx_max_power = %d -> amp %d\n",tx_max_power[0],get_tx_amp(tx_max_poHwer,tx_max_power));
init_openair0
();
init_openair0
();
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
d4984dc7
...
@@ -170,6 +170,7 @@ typedef struct {
...
@@ -170,6 +170,7 @@ typedef struct {
uint8_t
prach_format
;
uint8_t
prach_format
;
/// Num RA
/// Num RA
uint8_t
num_ra
;
uint8_t
num_ra
;
uint8_t
prach_slot
;
uint8_t
prach_start_symbol
;
uint8_t
prach_start_symbol
;
/// 38.211 (NCS 38.211 6.3.3.1).
/// 38.211 (NCS 38.211 6.3.3.1).
uint16_t
num_cs
;
uint16_t
num_cs
;
...
@@ -179,6 +180,8 @@ typedef struct {
...
@@ -179,6 +180,8 @@ typedef struct {
uint8_t
restricted_set
;
uint8_t
restricted_set
;
/// see TS 38.211 (6.3.3.2).
/// see TS 38.211 (6.3.3.2).
uint16_t
freq_msg1
;
uint16_t
freq_msg1
;
// When multiple SSBs per RO is configured, this indicates which one is selected in this RO -> this is used to properly compute the PRACH preamble
uint8_t
ssb_nb_in_ro
;
// nfapi_nr_ul_beamforming_t beamforming;
// nfapi_nr_ul_beamforming_t beamforming;
}
fapi_nr_ul_config_prach_pdu
;
}
fapi_nr_ul_config_prach_pdu
;
...
...
openair1/PHY/INIT/nr_parms.c
View file @
d4984dc7
...
@@ -385,7 +385,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
...
@@ -385,7 +385,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
fp
->
Lmax
=
64
;
fp
->
Lmax
=
64
;
}
}
fp
->
L_ssb
=
(((
uint64_t
)
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
)
<<
32
)
|
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
;
fp
->
L_ssb
=
(((
uint64_t
)
config
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
)
<<
32
)
|
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
;
fp
->
N_ssb
=
0
;
fp
->
N_ssb
=
0
;
for
(
int
p
=
0
;
p
<
fp
->
Lmax
;
p
++
)
for
(
int
p
=
0
;
p
<
fp
->
Lmax
;
p
++
)
...
...
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
d4984dc7
...
@@ -483,9 +483,15 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
...
@@ -483,9 +483,15 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
dft
(
dftsize
,(
int16_t
*
)
&
tmp_dft_in
,
dft
(
dftsize
,(
int16_t
*
)
&
tmp_dft_in
,
(
int16_t
*
)
&
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
],
1
);
(
int16_t
*
)
&
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
],
1
);
}
}
else
else
{
dft
(
dftsize
,(
int16_t
*
)
&
rxdata
[
rxdata_offset
-
sample_offset
],
//dft(dftsize,(int16_t *)&rxdata[rxdata_offset-sample_offset],
// (int16_t *)&rxdataF[symbol * frame_parms->ofdm_symbol_size], 1);
memcpy
((
void
*
)
tmp_dft_in
,
(
void
*
)
&
rxdata
[
rxdata_offset
-
sample_offset
],
(
frame_parms
->
ofdm_symbol_size
)
*
sizeof
(
int
));
dft
(
dftsize
,(
int16_t
*
)
&
tmp_dft_in
,
(
int16_t
*
)
&
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
],
1
);
(
int16_t
*
)
&
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
],
1
);
}
// clear DC carrier from OFDM symbols
// clear DC carrier from OFDM symbols
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
]
=
0
;
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
]
=
0
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
d4984dc7
...
@@ -4376,7 +4376,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
...
@@ -4376,7 +4376,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
ue
->
ulsch_Msg3_active
[
i
]
=
0
;
ue
->
ulsch_Msg3_active
[
i
]
=
0
;
}
}
}
}
nr_prach
=
nr_ue_get_rach
(
ue
->
prach_resources
[
gNB_id
],
mod_id
,
ue
->
CC_id
,
UE_mode
,
frame_tx
,
gNB_id
,
nr_tti_tx
);
nr_prach
=
nr_ue_get_rach
(
ue
->
prach_resources
[
gNB_id
],
ue
->
prach_vars
[
0
],
mod_id
,
ue
->
CC_id
,
UE_mode
,
frame_tx
,
gNB_id
,
nr_tti_tx
);
}
}
}
}
...
...
openair2/GNB_APP/gnb_config.c
View file @
d4984dc7
...
@@ -223,20 +223,12 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
...
@@ -223,20 +223,12 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
bits_unused
=
4
;
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
bits_unused
=
4
;
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
=
CALLOC
(
1
,
1
);
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
=
CALLOC
(
1
,
1
);
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
=
0
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
=
ssbmap
&
0xF0
;
if
(
i
<
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
bits_unused
)
curr_bit
=
0
;
else
curr_bit
=
(
ssbmap
>>
(
7
-
i
))
&
0x01
;
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
|=
curr_bit
<<
i
;
}
}
else
if
(
ssbmaplen
==
NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap
){
}
else
if
(
ssbmaplen
==
NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap
){
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
size
=
1
;
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
size
=
1
;
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
bits_unused
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
bits_unused
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
=
CALLOC
(
1
,
1
);
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
=
CALLOC
(
1
,
1
);
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
]
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
]
=
ssbmap
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
]
|=
(((
ssbmap
>>
(
7
-
i
))
&
0x01
)
<<
i
);
}
else
{
}
else
{
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
size
=
8
;
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
size
=
8
;
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
bits_unused
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
bits_unused
=
0
;
...
@@ -244,8 +236,7 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
...
@@ -244,8 +236,7 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
for
(
int
j
=
0
;
j
<
8
;
j
++
)
{
for
(
int
j
=
0
;
j
<
8
;
j
++
)
{
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
j
]
=
0
;
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
j
]
=
0
;
curr_bit
=
(
ssbmap
>>
(
j
<<
3
))
&
(
0xff
);
curr_bit
=
(
ssbmap
>>
(
j
<<
3
))
&
(
0xff
);
for
(
int
i
=
0
;
i
<
8
;
i
++
)
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
j
]
=
curr_bit
;
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
j
]
|=
(((
curr_bit
>>
(
7
-
i
))
&
0x01
)
<<
i
);
}
}
}
}
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
d4984dc7
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
d4984dc7
...
@@ -36,6 +36,36 @@
...
@@ -36,6 +36,36 @@
#include "NR_CellGroupConfig.h"
#include "NR_CellGroupConfig.h"
#include "nr_mac.h"
#include "nr_mac.h"
// ===============================================
// SSB to RO mapping public defines and structures
// ===============================================
#define MAX_SSB_PER_RO (16) // Maximum number of SSBs that can be mapped to a single RO
#define MAX_TDM (7) // Maximum nb of PRACH occasions TDMed in a slot
#define MAX_FDM (8) // Maximum nb of PRACH occasions FDMed in a slot
// PRACH occasion details
typedef
struct
prach_occasion_info
{
uint8_t
start_symbol
;
// 0 - 13 (14 symbols in a slot)
uint8_t
fdm
;
// 0-7 (possible values of msg1-FDM: 1, 2, 4 or 8)
uint8_t
slot
;
// 0 - 159 (maximum number of slots in a 10ms frame - @ 240kHz)
uint8_t
frame
;
// 0 - 15 (maximum number of frames in a 160ms association pattern)
uint8_t
mapped_ssb_idx
[
MAX_SSB_PER_RO
];
// List of mapped SSBs
uint8_t
nb_mapped_ssb
;
uint16_t
format
;
// RO preamble format
}
prach_occasion_info_t
;
// PRACH occasion slot details
// A PRACH occasion slot is a series of PRACH occasions in time (symbols) and frequency
typedef
struct
prach_occasion_slot
{
prach_occasion_info_t
prach_occasion
[
MAX_TDM
][
MAX_FDM
];
// Starting symbol of each PRACH occasions in a slot
uint8_t
nb_of_prach_occasion_in_time
;
uint8_t
nb_of_prach_occasion_in_freq
;
}
prach_occasion_slot_t
;
// ========================================
typedef
enum
{
typedef
enum
{
NR_DL_DCI_FORMAT_1_0
=
0
,
NR_DL_DCI_FORMAT_1_0
=
0
,
NR_DL_DCI_FORMAT_1_1
,
NR_DL_DCI_FORMAT_1_1
,
...
@@ -89,6 +119,9 @@ void find_monitoring_periodicity_offset_common(NR_SearchSpace_t *ss,
...
@@ -89,6 +119,9 @@ void find_monitoring_periodicity_offset_common(NR_SearchSpace_t *ss,
uint16_t
*
slot_period
,
uint16_t
*
slot_period
,
uint16_t
*
offset
);
uint16_t
*
offset
);
void
build_ssb_to_ro_map
(
NR_ServingCellConfigCommon_t
*
scc
,
uint8_t
unpaired
);
int
get_nr_prach_info_from_ssb_index
(
uint8_t
ssb_idx
,
int
frame
,
int
slot
,
prach_occasion_info_t
**
prach_occasion_info_pp
);
int
get_nr_prach_info_from_index
(
uint8_t
index
,
int
get_nr_prach_info_from_index
(
uint8_t
index
,
int
frame
,
int
frame
,
int
slot
,
int
slot
,
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
d4984dc7
...
@@ -204,7 +204,7 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
...
@@ -204,7 +204,7 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
uint16_t
band
;
uint16_t
band
;
int32_t
offset
;
int32_t
offset
;
get_band
((
cfg
->
carrier_config
.
dl_frequency
)
*
1000
,
get_band
((
uint64_t
)(
cfg
->
carrier_config
.
dl_frequency
)
*
1000
,
&
band
,
&
band
,
&
offset
,
&
offset
,
&
frame_type
);
&
frame_type
);
...
@@ -243,8 +243,8 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
...
@@ -243,8 +243,8 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
+
4
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
+
4
]
<<
i
*
8
);
}
}
break
;
break
;
default:
default:
...
@@ -433,6 +433,9 @@ int nr_rrc_mac_config_req_ue(
...
@@ -433,6 +433,9 @@ int nr_rrc_mac_config_req_ue(
LOG_I
(
MAC
,
"Configuring CRNTI %x
\n
"
,
mac
->
crnti
);
LOG_I
(
MAC
,
"Configuring CRNTI %x
\n
"
,
mac
->
crnti
);
}
}
// Setup the SSB to Rach Occasions mapping according to the config
build_ssb_to_ro_map
(
mac
->
scc
,
mac
->
phy_config
.
config_req
.
cell_config
.
frame_duplex_type
);
/*
/*
if(mac_cell_group_configP != NULL){
if(mac_cell_group_configP != NULL){
if(mac_cell_group_configP->drx_Config != NULL ){
if(mac_cell_group_configP->drx_Config != NULL ){
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
d4984dc7
...
@@ -237,6 +237,7 @@ andom-access to transmit a BSR along with the C-RNTI control element (see 5.1.4
...
@@ -237,6 +237,7 @@ andom-access to transmit a BSR along with the C-RNTI control element (see 5.1.4
@param nr_tti_tx slot for PRACH transmission
@param nr_tti_tx slot for PRACH transmission
@returns indication to generate PRACH to phy */
@returns indication to generate PRACH to phy */
uint8_t
nr_ue_get_rach
(
NR_PRACH_RESOURCES_t
*
prach_resources
,
uint8_t
nr_ue_get_rach
(
NR_PRACH_RESOURCES_t
*
prach_resources
,
NR_UE_PRACH
*
prach_vars
,
module_id_t
mod_id
,
module_id_t
mod_id
,
int
CC_id
,
int
CC_id
,
UE_MODE_t
UE_mode
,
UE_MODE_t
UE_mode
,
...
@@ -254,9 +255,9 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
...
@@ -254,9 +255,9 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
void
nr_get_prach_resources
(
module_id_t
mod_id
,
void
nr_get_prach_resources
(
module_id_t
mod_id
,
int
CC_id
,
int
CC_id
,
uint8_t
gNB_id
,
uint8_t
gNB_id
,
uint8_t
t_id
,
uint8_t
first_Msg3
,
uint8_t
first_Msg3
,
NR_PRACH_RESOURCES_t
*
prach_resources
,
NR_PRACH_RESOURCES_t
*
prach_resources
,
NR_UE_PRACH
*
prach_vars
,
NR_RACH_ConfigDedicated_t
*
rach_ConfigDedicated
);
NR_RACH_ConfigDedicated_t
*
rach_ConfigDedicated
);
void
nr_Msg1_transmitted
(
module_id_t
mod_id
,
uint8_t
CC_id
,
frame_t
frameP
,
uint8_t
gNB_id
);
void
nr_Msg1_transmitted
(
module_id_t
mod_id
,
uint8_t
CC_id
,
frame_t
frameP
,
uint8_t
gNB_id
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
d4984dc7
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
d4984dc7
...
@@ -935,18 +935,14 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
...
@@ -935,18 +935,14 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
}
}
// This function schedules the PRACH according to prach_ConfigurationIndex and TS 38.211, tables 6.3.3.2.x
// This function schedules the PRACH according to prach_ConfigurationIndex and TS 38.211, tables 6.3.3.2.x
// It fills the PRACH PDU per each FD occasion.
// PRACH formats 9, 10, 11 are corresponding to dual PRACH format configurations A1/B1, A2/B2, A3/B3.
// PRACH formats 9, 10, 11 are corresponding to dual PRACH format configurations A1/B1, A2/B2, A3/B3.
// - todo:
// - todo:
// - Partial configuration is actually already stored in (fapi_nr_prach_config_t) &mac->phy_config.config_req->prach_config
// - Partial configuration is actually already stored in (fapi_nr_prach_config_t) &mac->phy_config.config_req->prach_config
void
nr_ue_prach_scheduler
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
slotP
)
{
void
nr_ue_prach_scheduler
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
slotP
)
{
uint8_t
config_index
,
mu
,
N_dur
,
N_t_slot
,
start_symbol
;
uint16_t
RA_sfn_index
;
uint8_t
N_RA_slot
;
uint8_t
config_period
;
uint16_t
format
,
format0
,
format1
,
ncs
;
uint16_t
format
,
format0
,
format1
,
ncs
;
int
msg1_FDM
,
is_nr_prach_slot
,
fdm
;
int
is_nr_prach_slot
;
prach_occasion_info_t
*
prach_occasion_info_p
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
...
@@ -957,59 +953,35 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
...
@@ -957,59 +953,35 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
NR_ServingCellConfigCommon_t
*
scc
=
mac
->
scc
;
NR_ServingCellConfigCommon_t
*
scc
=
mac
->
scc
;
NR_RACH_ConfigCommon_t
*
setup
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
NR_RACH_ConfigCommon_t
*
setup
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
NR_FrequencyInfoDL_t
*
frequencyInfoDL
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
;
NR_RACH_ConfigGeneric_t
*
rach_ConfigGeneric
=
&
setup
->
rach_ConfigGeneric
;
NR_RACH_ConfigGeneric_t
*
rach_ConfigGeneric
=
&
setup
->
rach_ConfigGeneric
;
config_index
=
rach_ConfigGeneric
->
prach_ConfigurationIndex
;
mac
->
RA_offset
=
2
;
// to compensate the rx frame offset at the gNB
mac
->
RA_offset
=
2
;
// to compensate the rx frame offset at the gNB
mac
->
generate_nr_prach
=
0
;
// Reset flag for PRACH generation
mac
->
generate_nr_prach
=
0
;
// Reset flag for PRACH generation
if
(
is_nr_UL_slot
(
scc
,
slotP
))
{
if
(
is_nr_UL_slot
(
scc
,
slotP
))
{
if
(
setup
->
msg1_SubcarrierSpacing
)
// WIP-IDCC Need to get the proper selected ssb_idx
mu
=
*
setup
->
msg1_SubcarrierSpacing
;
// Initial beam selection functionality is not available yet
else
uint8_t
selected_gnb_ssb_idx
=
0
;
mu
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
is_nr_prach_slot
=
get_nr_prach_info_from_index
(
config_index
,
// Get any valid PRACH occasion in the current slot for the selected SSB index
is_nr_prach_slot
=
get_nr_prach_info_from_ssb_index
(
selected_gnb_ssb_idx
,
(
int
)
frameP
,
(
int
)
frameP
,
(
int
)
slotP
,
(
int
)
slotP
,
frequencyInfoDL
->
absoluteFrequencyPointA
,
&
prach_occasion_info_p
);
mu
,
cfg
->
cell_config
.
frame_duplex_type
,
&
format
,
&
start_symbol
,
&
N_t_slot
,
&
N_dur
,
&
RA_sfn_index
,
&
N_RA_slot
,
&
config_period
);
if
(
is_nr_prach_slot
&&
mac
->
ra_state
==
RA_UE_IDLE
)
{
if
(
is_nr_prach_slot
&&
mac
->
ra_state
==
RA_UE_IDLE
)
{
AssertFatal
(
NULL
!=
prach_occasion_info_p
,
"PRACH Occasion Info not returned in a valid NR Prach Slot
\n
"
);
mac
->
generate_nr_prach
=
1
;
mac
->
generate_nr_prach
=
1
;
fdm
=
rach_ConfigGeneric
->
msg1_FDM
;
format
=
prach_occasion_info_p
->
format
;
switch
(
fdm
){
case
0
:
case
1
:
case
2
:
case
3
:
msg1_FDM
=
1
<<
fdm
;
break
;
default:
AssertFatal
(
1
==
0
,
"Unknown msg1_FDM from rach_ConfigGeneric %d
\n
"
,
fdm
);
}
format0
=
format
&
0xff
;
// single PRACH format
format0
=
format
&
0xff
;
// single PRACH format
format1
=
(
format
>>
8
)
&
0xff
;
// dual PRACH format
format1
=
(
format
>>
8
)
&
0xff
;
// dual PRACH format
ul_config
->
sfn
=
frameP
;
ul_config
->
sfn
=
frameP
;
ul_config
->
slot
=
slotP
;
ul_config
->
slot
=
slotP
;
for
(
int
n
=
0
;
n
<
msg1_FDM
;
n
++
)
{
// one structure per frequency domain occasion
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PRACH
;
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pdu_type
=
FAPI_NR_UL_CONFIG_TYPE_PRACH
;
prach_config_pdu
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
prach_config_pdu
;
prach_config_pdu
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
prach_config_pdu
;
memset
(
prach_config_pdu
,
0
,
sizeof
(
fapi_nr_ul_config_prach_pdu
));
memset
(
prach_config_pdu
,
0
,
sizeof
(
fapi_nr_ul_config_prach_pdu
));
...
@@ -1017,15 +989,26 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
...
@@ -1017,15 +989,26 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
ncs
=
get_NCS
(
rach_ConfigGeneric
->
zeroCorrelationZoneConfig
,
format0
,
setup
->
restrictedSetConfig
);
ncs
=
get_NCS
(
rach_ConfigGeneric
->
zeroCorrelationZoneConfig
,
format0
,
setup
->
restrictedSetConfig
);
// filling PRACH PDU for FAPI config request
prach_config_pdu
->
phys_cell_id
=
*
scc
->
physCellId
;
prach_config_pdu
->
phys_cell_id
=
*
scc
->
physCellId
;
prach_config_pdu
->
num_prach_ocas
=
N_t_slot
;
prach_config_pdu
->
num_prach_ocas
=
1
;
prach_config_pdu
->
prach_start_symbol
=
start_symbol
;
prach_config_pdu
->
prach_slot
=
prach_occasion_info_p
->
slot
;
prach_config_pdu
->
num_ra
=
n
;
prach_config_pdu
->
prach_start_symbol
=
prach_occasion_info_p
->
start_symbol
;
prach_config_pdu
->
num_ra
=
prach_occasion_info_p
->
fdm
;
prach_config_pdu
->
num_cs
=
ncs
;
prach_config_pdu
->
num_cs
=
ncs
;
prach_config_pdu
->
root_seq_id
=
prach_config
->
num_prach_fd_occasions_list
[
n
].
prach_root_sequence_index
;
prach_config_pdu
->
root_seq_id
=
prach_config
->
num_prach_fd_occasions_list
[
prach_occasion_info_p
->
fdm
].
prach_root_sequence_index
;
prach_config_pdu
->
restricted_set
=
prach_config
->
restricted_set_config
;
prach_config_pdu
->
restricted_set
=
prach_config
->
restricted_set_config
;
prach_config_pdu
->
freq_msg1
=
prach_config
->
num_prach_fd_occasions_list
[
n
].
k1
;
prach_config_pdu
->
freq_msg1
=
prach_config
->
num_prach_fd_occasions_list
[
prach_occasion_info_p
->
fdm
].
k1
;
LOG_D
(
MAC
,
"Selected RO Frame %u, Slot %u, Symbol %u, Fdm %u
\n
"
,
frameP
,
prach_config_pdu
->
prach_slot
,
prach_config_pdu
->
prach_start_symbol
,
prach_config_pdu
->
num_ra
);
// Search which SSB is mapped in the RO (among all the SSBs mapped to this RO)
for
(
prach_config_pdu
->
ssb_nb_in_ro
=
0
;
prach_config_pdu
->
ssb_nb_in_ro
<
prach_occasion_info_p
->
nb_mapped_ssb
;
prach_config_pdu
->
ssb_nb_in_ro
++
)
{
if
(
prach_occasion_info_p
->
mapped_ssb_idx
[
prach_config_pdu
->
ssb_nb_in_ro
]
==
selected_gnb_ssb_idx
)
break
;
}
AssertFatal
(
prach_config_pdu
->
ssb_nb_in_ro
<
prach_occasion_info_p
->
nb_mapped_ssb
,
"%u not found in the mapped SSBs to the PRACH occasion"
,
selected_gnb_ssb_idx
);
if
(
format1
!=
0xff
)
{
if
(
format1
!=
0xff
)
{
switch
(
format0
)
{
// dual PRACH format
switch
(
format0
)
{
// dual PRACH format
...
@@ -1073,19 +1056,17 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
...
@@ -1073,19 +1056,17 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
case
0xc0
:
case
0xc0
:
prach_config_pdu
->
prach_format
=
9
;
prach_config_pdu
->
prach_format
=
9
;
break
;
break
;
case
0xc2
:
prach_config_pdu
->
prach_format
=
10
;
break
;
default:
default:
AssertFatal
(
1
==
0
,
"Invalid PRACH format"
);
AssertFatal
(
1
==
0
,
"Invalid PRACH format"
);
}
}
}
}
// if format1
}
}
else
if
(
mac
->
ra_state
==
RA_SUCCEEDED
){
}
else
if
(
mac
->
ra_state
==
RA_SUCCEEDED
){
mac
->
generate_nr_prach
=
2
;
mac
->
generate_nr_prach
=
2
;
}
}
// if-else is_nr_prach_slot
mac
->
scheduled_response
.
ul_config
=
ul_config
;
mac
->
scheduled_response
.
ul_config
=
ul_config
;
}
}
// if is_nr_UL_slot
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
d4984dc7
...
@@ -125,7 +125,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
...
@@ -125,7 +125,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
uint16_t
band
;
uint16_t
band
;
int32_t
offset
;
int32_t
offset
;
get_band
((
cfg
->
carrier_config
.
dl_frequency
.
value
)
*
1000
,
get_band
((
uint64_t
)(
cfg
->
carrier_config
.
dl_frequency
.
value
)
*
1000
,
&
band
,
&
band
,
&
offset
,
&
offset
,
&
frame_type
);
&
frame_type
);
...
...
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