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
908c8999
Commit
908c8999
authored
Dec 10, 2020
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_FR2_RA' into NR_FAPI_beamindex_SSB_RO
parents
373cd5fc
ee54e20e
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
138 additions
and
137 deletions
+138
-137
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+1
-0
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+34
-0
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+32
-73
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+2
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+3
-3
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+27
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+4
-0
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+4
-2
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+3
-1
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+9
-10
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+9
-8
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
+3
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+1
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+3
-32
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
+1
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
+1
-1
No files found.
openair1/PHY/INIT/nr_init.c
View file @
908c8999
...
...
@@ -134,6 +134,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
nr_generate_modulation_table
();
nr_init_pdcch_dmrs
(
gNB
,
cfg
->
cell_config
.
phy_cell_id
.
value
);
nr_init_pbch_interleaver
(
gNB
->
nr_pbch_interleaver
);
//PDSCH DMRS init
gNB
->
nr_gold_pdsch_dmrs
=
(
uint32_t
****
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
***
));
uint32_t
****
pdsch_dmrs
=
gNB
->
nr_gold_pdsch_dmrs
;
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
908c8999
...
...
@@ -580,6 +580,40 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
}
}
//PDCCH DMRS init (eNB offset = 0)
ue
->
nr_gold_pdcch
[
0
]
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
uint32_t
***
pdcch_dmrs
=
ue
->
nr_gold_pdcch
[
0
];
AssertFatal
(
pdcch_dmrs
!=
NULL
,
"NR init: pdcch_dmrs malloc failed
\n
"
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
pdcch_dmrs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
pdcch_dmrs
[
slot
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
pdcch_dmrs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
NR_MAX_PDCCH_DMRS_INIT_LENGTH_DWORD
*
sizeof
(
uint32_t
));
AssertFatal
(
pdcch_dmrs
[
slot
][
symb
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
}
}
//PDSCH DMRS init (eNB offset = 0)
ue
->
nr_gold_pdsch
[
0
]
=
(
uint32_t
****
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
***
));
uint32_t
****
pdsch_dmrs
=
ue
->
nr_gold_pdsch
[
0
];
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
pdsch_dmrs
[
slot
]
=
(
uint32_t
***
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
**
));
AssertFatal
(
pdsch_dmrs
[
slot
]
!=
NULL
,
"NR init: pdsch_dmrs for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
pdsch_dmrs
[
slot
][
symb
]
=
(
uint32_t
**
)
malloc16
(
NR_MAX_NB_CODEWORDS
*
sizeof
(
uint32_t
*
));
AssertFatal
(
pdsch_dmrs
[
slot
][
symb
]
!=
NULL
,
"NR init: pdsch_dmrs for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
for
(
int
q
=
0
;
q
<
NR_MAX_NB_CODEWORDS
;
q
++
)
{
pdsch_dmrs
[
slot
][
symb
][
q
]
=
(
uint32_t
*
)
malloc16
(
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
*
sizeof
(
uint32_t
));
AssertFatal
(
pdsch_dmrs
[
slot
][
symb
][
q
]
!=
NULL
,
"NR init: pdsch_dmrs for slot %d symbol %d codeword %d - malloc failed
\n
"
,
slot
,
symb
,
q
);
}
}
}
// DLSCH
for
(
eNB_id
=
0
;
eNB_id
<
ue
->
n_connected_eNB
;
eNB_id
++
)
{
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
...
...
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
908c8999
...
...
@@ -26,6 +26,7 @@ void nr_gold_pbch(PHY_VARS_NR_UE* ue)
unsigned
int
n
,
x1
,
x2
;
unsigned
int
Nid
,
i_ssb
,
i_ssb2
;
unsigned
char
Lmax
,
l
,
n_hf
,
N_hf
;
uint8_t
reset
;
Nid
=
ue
->
frame_parms
.
Nid_cell
;
Lmax
=
ue
->
frame_parms
.
Lmax
;
...
...
@@ -37,24 +38,13 @@ void nr_gold_pbch(PHY_VARS_NR_UE* ue)
i_ssb
=
l
&
(
Lmax
-
1
);
i_ssb2
=
i_ssb
+
(
n_hf
<<
2
);
x1
=
1
+
(
1
<<
31
)
;
reset
=
1
;
x2
=
(
1
<<
11
)
*
(
i_ssb2
+
1
)
*
((
Nid
>>
2
)
+
1
)
+
(
1
<<
6
)
*
(
i_ssb2
+
1
)
+
(
Nid
&
3
);
x2
=
x2
^
((
x2
^
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
for
(
n
=
1
;
n
<
50
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
}
for
(
n
=
0
;
n
<
NR_PBCH_DMRS_LENGTH_DWORD
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
ue
->
nr_gold_pbch
[
n_hf
][
l
][
n
]
=
x1
^
x2
;
ue
->
nr_gold_pbch
[
n_hf
][
l
][
n
]
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
}
...
...
@@ -69,38 +59,24 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,
unsigned
char
ns
,
l
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
unsigned
int
nid
;
uint8_t
reset
;
if
(
n_idDMRS
)
nid
=
n_idDMRS
;
else
nid
=
ue
->
frame_parms
.
Nid_cell
;
for
(
ns
=
0
;
ns
<
20
;
ns
++
)
{
for
(
ns
=
0
;
ns
<
ue
->
frame_parms
.
slots_per_frame
;
ns
++
)
{
for
(
l
=
0
;
l
<
length_dmrs
;
l
++
)
{
x2tmp0
=
((
14
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
reset
=
1
;
x2tmp0
=
((
ue
->
frame_parms
.
symbols_per_slot
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
x2
=
(
x2tmp0
+
(
nid
<<
1
))
%
(
1
<<
31
);
//cinit
x1
=
1
+
(
1
<<
31
);
x2
=
x2
^
((
x2
^
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
for
(
n
=
1
;
n
<
50
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
//printf("x1 : %x, x2 : %x\n",x1,x2);
}
for
(
n
=
0
;
n
<
52
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
ue
->
nr_gold_pdcch
[
0
][
ns
][
l
][
n
]
=
x1
^
x2
;
// if (ns==1 && l==0) printf("n=%d : c %x\n",n,x1^x2);
for
(
n
=
0
;
n
<
NR_MAX_PDCCH_DMRS_INIT_LENGTH_DWORD
;
n
++
)
{
ue
->
nr_gold_pdcch
[
0
][
ns
][
l
][
n
]
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
}
}
...
...
@@ -113,6 +89,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
int
nscid
;
unsigned
int
nid
;
uint8_t
reset
;
/// to be updated from higher layer
//unsigned short lbar = 0;
...
...
@@ -125,37 +102,19 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
//printf("gold pdsch nid %d lbar %d\n",nid,lbar);
for
(
ns
=
0
;
ns
<
20
;
ns
++
)
{
for
(
ns
=
0
;
ns
<
ue
->
frame_parms
.
slots_per_frame
;
ns
++
)
{
for
(
l
=
0
;
l
<
14
;
l
++
)
{
for
(
l
=
0
;
l
<
ue
->
frame_parms
.
symbols_per_slot
;
l
++
)
{
x2tmp0
=
((
14
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
reset
=
1
;
x2tmp0
=
((
ue
->
frame_parms
.
symbols_per_slot
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
x2
=
(
x2tmp0
+
(
nid
<<
1
)
+
nscid
)
%
(
1
<<
31
);
//cinit
LOG_D
(
PHY
,
"UE DMRS slot %d, symb %d, x2 %x, nscid %d
\n
"
,
ns
,
l
,
x2
,
nscid
);
//printf("ns %d gold pdsch x2 %d\n",ns,x2);
x1
=
1
+
(
1
<<
31
);
x2
=
x2
^
((
x2
^
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
for
(
n
=
1
;
n
<
50
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
//printf("x1 : %x, x2 : %x\n",x1,x2);
}
for
(
n
=
0
;
n
<
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
ue
->
nr_gold_pdsch
[
nscid
][
ns
][
l
][
n
]
=
x1
^
x2
;
// if ((ns==2)&&(l==0))
//printf("n=%d : c %x\n",n,x1^x2);
ue
->
nr_gold_pdsch
[
0
][
ns
][
l
][
nscid
][
n
]
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
}
}
}
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
908c8999
...
...
@@ -689,7 +689,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
uint16_t
rb_offset
=
(
bwp_start_subcarrier
-
ue
->
frame_parms
.
first_carrier_offset
)
/
12
;
uint8_t
config_type
=
ue
->
dmrs_DownlinkConfig
.
pdsch_dmrs_type
;
int8_t
delta
=
get_delta
(
p
,
config_type
);
nr_pdsch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdsch
[
eNB_offset
][
Ns
][
symbol
],
&
pilot
[
0
],
1000
,
0
,
nb_rb_pdsch
+
rb_offset
);
nr_pdsch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdsch
[
eNB_offset
][
Ns
][
symbol
]
[
0
]
,
&
pilot
[
0
],
1000
,
0
,
nb_rb_pdsch
+
rb_offset
);
if
(
config_type
==
pdsch_dmrs_type1
){
nushift
=
(
p
>>
1
)
&
1
;
...
...
@@ -1321,7 +1321,7 @@ void nr_pdsch_ptrs_processing(PHY_VARS_NR_UE *ue,
nr_slot_rx
,
symbol
,
frame_parms
->
ofdm_symbol_size
,
(
int16_t
*
)
&
pdsch_vars
[
eNB_id
]
->
rxdataF_comp0
[
aarx
][(
symbol
*
nb_re_pdsch
)],
ue
->
nr_gold_pdsch
[
eNB_id
][
nr_slot_rx
][
symbol
],
ue
->
nr_gold_pdsch
[
eNB_id
][
nr_slot_rx
][
symbol
]
[
0
]
,
&
phase_per_symbol
[
2
*
symbol
],
&
ptrs_re_symbol
[
symbol
]);
}
...
...
openair1/PHY/defs_nr_UE.h
View file @
908c8999
...
...
@@ -889,7 +889,7 @@ typedef struct {
UE_MODE_t
UE_mode
[
NUMBER_OF_CONNECTED_gNB_MAX
];
/// cell-specific reference symbols
uint32_t
lte_gold_table
[
7
][
20
][
2
][
14
];
//
uint32_t lte_gold_table[7][20][2][14];
#if defined(UPGRADE_RAT_NR)
...
...
@@ -903,10 +903,10 @@ typedef struct {
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
/// PDSCH DMRS
uint32_t
nr_gold_pdsch
[
2
][
20
][
14
][
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
];
uint32_t
****
nr_gold_pdsch
[
NUMBER_OF_CONNECTED_eNB_MAX
];
/// PDCCH DMRS
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
52
];
uint32_t
***
nr_gold_pdcch
[
NUMBER_OF_CONNECTED_eNB_MAX
];
/// PUSCH DMRS sequence
uint32_t
****
nr_gold_pusch_dmrs
;
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
908c8999
...
...
@@ -974,6 +974,33 @@ int64_t *get_prach_config_info(uint32_t pointa,
return
prach_config_info_p
;
}
void
find_aggregation_candidates
(
uint8_t
*
aggregation_level
,
uint8_t
*
nr_of_candidates
,
NR_SearchSpace_t
*
ss
)
{
if
(
ss
->
nrofCandidates
->
aggregationLevel1
!=
NR_SearchSpace__nrofCandidates__aggregationLevel1_n0
)
{
*
aggregation_level
=
1
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel1
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel2
!=
NR_SearchSpace__nrofCandidates__aggregationLevel2_n0
)
{
*
aggregation_level
=
2
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel2
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel4
!=
NR_SearchSpace__nrofCandidates__aggregationLevel4_n0
)
{
*
aggregation_level
=
4
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel4
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel8
!=
NR_SearchSpace__nrofCandidates__aggregationLevel8_n0
)
{
*
aggregation_level
=
8
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel8
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel16
!=
NR_SearchSpace__nrofCandidates__aggregationLevel16_n0
)
{
*
aggregation_level
=
16
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel16
;
}
}
void
find_monitoring_periodicity_offset_common
(
NR_SearchSpace_t
*
ss
,
uint16_t
*
slot_period
,
uint16_t
*
offset
)
{
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
908c8999
...
...
@@ -123,6 +123,10 @@ uint16_t nr_dci_size(NR_ServingCellConfigCommon_t *scc,
uint16_t
N_RB
,
int
bwp_id
);
void
find_aggregation_candidates
(
uint8_t
*
aggregation_level
,
uint8_t
*
nr_of_candidates
,
NR_SearchSpace_t
*
ss
);
void
find_monitoring_periodicity_offset_common
(
NR_SearchSpace_t
*
ss
,
uint16_t
*
slot_period
,
uint16_t
*
offset
);
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
908c8999
...
...
@@ -227,9 +227,9 @@ typedef struct {
/// Random-access variable for window calculation (subframe of last change in window counter)
uint8_t
RA_tx_subframe
;
/// Scheduled TX frame for RA Msg3
frame
_t
msg3_frame
;
int16
_t
msg3_frame
;
/// Scheduled TX slot for RA Msg3
slot
_t
msg3_slot
;
int16
_t
msg3_slot
;
/// Random-access variable for backoff (frame of last change in backoff counter)
uint32_t
RA_backoff_frame
;
/// Random-access variable for backoff (subframe of last change in backoff counter)
...
...
@@ -250,6 +250,8 @@ typedef struct {
uint8_t
RA_BI_found
;
/// Flag for the Msg1 generation: enabled at every occurrence of nr prach slot
uint8_t
generate_nr_prach
;
/// SSB index from MIB decoding
uint8_t
mib_ssb
;
//// FAPI-like interface message
fapi_nr_ul_config_request_t
*
ul_config_request
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
908c8999
...
...
@@ -499,6 +499,8 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
mac
->
RA_PREAMBLE_TRANSMISSION_COUNTER
=
1
;
mac
->
RA_PREAMBLE_POWER_RAMPING_COUNTER
=
1
;
mac
->
RA_Msg3_size
=
size_sdu
+
sizeof
(
NR_MAC_SUBHEADER_SHORT
)
+
sizeof
(
NR_MAC_SUBHEADER_SHORT
);
mac
->
msg3_frame
=
-
1
;
// initialize to an invalid value
mac
->
msg3_slot
=
-
1
;
mac
->
RA_prachMaskIndex
=
0
;
// todo: add the backoff condition here
mac
->
RA_backoff_cnt
=
0
;
...
...
@@ -559,7 +561,7 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
mac
->
RA_window_cnt
=
-
1
;
mac
->
ra_state
=
RA_SUCCEEDED
;
mac
->
generate_nr_prach
=
2
;
LOG_I
(
MAC
,
"[MAC][UE %d][RAPROC]:
RAR successfully received
\n
"
,
mod_id
);
LOG_I
(
MAC
,
"[MAC][UE %d][RAPROC]:
frame %d slot %d RAR successfully received
\n
"
,
mod_id
,
frame
,
nr_slot_tx
);
}
else
if
(
mac
->
RA_window_cnt
==
0
&&
!
mac
->
RA_RAPID_found
)
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
View file @
908c8999
...
...
@@ -54,16 +54,15 @@ void fill_dci_search_candidates(NR_SearchSpace_t *ss,fapi_nr_dl_config_dci_dl_pd
LOG_D
(
MAC
,
"Filling search candidates for DCI
\n
"
);
rel15
->
number_of_candidates
=
4
;
rel15
->
CCE
[
0
]
=
0
;
rel15
->
L
[
0
]
=
4
;
rel15
->
CCE
[
1
]
=
4
;
rel15
->
L
[
1
]
=
4
;
rel15
->
CCE
[
2
]
=
8
;
rel15
->
L
[
2
]
=
4
;
rel15
->
CCE
[
3
]
=
12
;
rel15
->
L
[
3
]
=
4
;
uint8_t
aggregation
;
find_aggregation_candidates
(
&
aggregation
,
&
rel15
->
number_of_candidates
,
ss
);
for
(
int
i
=
0
;
i
<
rel15
->
number_of_candidates
;
i
++
)
{
rel15
->
CCE
[
i
]
=
i
*
aggregation
;
rel15
->
L
[
i
]
=
aggregation
;
}
}
void
config_dci_pdu
(
NR_UE_MAC_INST_t
*
mac
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
,
fapi_nr_dl_config_request_t
*
dl_config
,
int
rnti_type
,
int
ss_id
){
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
908c8999
...
...
@@ -993,7 +993,10 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
LOG_D
(
MAC
,
"cell barred (0=barred,1=notBarred): %d
\n
"
,
(
int
)
mac
->
mib
->
cellBarred
);
LOG_D
(
MAC
,
"intra frequency reselection (0=allowed,1=notAllowed): %d
\n
"
,
(
int
)
mac
->
mib
->
intraFreqReselection
);
LOG_D
(
MAC
,
"half frame bit(extra bits): %d
\n
"
,
(
int
)
half_frame_bit
);
LOG_D
(
MAC
,
"ssb index(extra bits): %d
\n
"
,
(
int
)
ssb_index
);
LOG_I
(
MAC
,
"ssb index(extra bits): %d
\n
"
,
(
int
)
ssb_index
);
//storing ssb index in the mac structure
mac
->
mib_ssb
=
ssb_index
;
subcarrier_spacing_t
scs_ssb
=
scs_30kHz
;
// default for
//const uint32_t scs_index = 0;
...
...
@@ -1660,7 +1663,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
ul_info
->
module_id
);
if
(
mac
->
RA_active
&&
ul_info
->
slot_tx
==
mac
->
msg3_slot
&&
ul_info
->
frame_tx
==
mac
->
msg3_frame
){
if
(
ul_info
->
slot_tx
==
mac
->
msg3_slot
&&
ul_info
->
frame_tx
==
mac
->
msg3_frame
){
uint8_t
ulsch_input_buffer
[
MAX_ULSCH_PAYLOAD_BYTES
];
nr_scheduled_response_t
scheduled_response
;
...
...
@@ -1697,7 +1700,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
}
//}
LOG_
D
(
MAC
,
"[UE %d] Frame %d, Subframe %d Adding Msg3 UL Config Request for rnti: %x
\n
"
,
LOG_
I
(
MAC
,
"[UE %d] Frame %d, Subframe %d Adding Msg3 UL Config Request for rnti: %x
\n
"
,
ul_info
->
module_id
,
ul_info
->
frame_tx
,
ul_info
->
slot_tx
,
...
...
@@ -1717,6 +1720,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
){
mac
->
if_module
->
scheduled_response
(
&
scheduled_response
);
}
mac
->
msg3_frame
=
-
1
;
// re-initialize to an invalid value after scheduling
mac
->
msg3_slot
=
-
1
;
}
}
}
...
...
@@ -1759,9 +1764,7 @@ void nr_ue_msg3_scheduler(NR_UE_MAC_INST_t *mac,
else
mac
->
msg3_frame
=
current_frame
;
#ifdef DEBUG_MSG3
LOG_D
(
MAC
,
"[DEBUG_MSG3] current_slot %d k2 %d delta %d temp_slot %d mac->msg3_frame %d mac->msg3_slot %d
\n
"
,
current_slot
,
k2
,
delta
,
current_slot
+
k2
+
delta
,
mac
->
msg3_frame
,
mac
->
msg3_slot
);
#endif
}
// This function schedules the PRACH according to prach_ConfigurationIndex and TS 38.211, tables 6.3.3.2.x
...
...
@@ -1792,9 +1795,7 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
if
(
is_nr_UL_slot
(
scc
,
slotP
))
{
// WIP Need to get the proper selected ssb_idx
// Initial beam selection functionality is not available yet
uint8_t
selected_gnb_ssb_idx
=
0
;
uint8_t
selected_gnb_ssb_idx
=
mac
->
mib_ssb
;
// 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
,
...
...
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
View file @
908c8999
...
...
@@ -116,6 +116,7 @@ void nr_config_Msg3_pdu(NR_UE_MAC_INST_t *mac,
mask
=
(
1
<<
((
int
)
ceil
(
log2
((
ibwp_size
*
(
ibwp_size
+
1
))
>>
1
))))
-
1
;
else
mask
=
(
1
<<
(
28
-
(
int
)(
ceil
(
log2
((
ibwp_size
*
(
ibwp_size
+
1
))
>>
1
)))))
-
1
;
f_alloc
=
Msg3_f_alloc
&
mask
;
nr_ue_process_dci_freq_dom_resource_assignment
(
pusch_config_pdu
,
NULL
,
ibwp_size
,
0
,
f_alloc
);
...
...
@@ -273,7 +274,8 @@ uint16_t nr_ue_process_rar(module_id_t mod_id,
if
(
ue_mac
->
RA_RAPID_found
)
{
uint8_t
freq_hopping
,
mcs
,
Msg3_t_alloc
,
Msg3_f_alloc
;
uint8_t
freq_hopping
,
mcs
,
Msg3_t_alloc
;
uint16_t
Msg3_f_alloc
;
unsigned
char
tpc_command
;
#ifdef DEBUG_RAR
unsigned
char
csi_req
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
908c8999
...
...
@@ -360,7 +360,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
nr_rrc_trigger
(
&
ctxt
,
0
/*CC_id*/
,
frame
,
slot
>>
*
scc
->
ssbSubcarrierSpacing
);
}
const
uint64_t
dlsch_in_slot_bitmap
=
(
1
<<
1
)
|
(
1
<<
2
);
const
uint64_t
dlsch_in_slot_bitmap
=
(
1
<<
1
)
|
(
1
<<
3
);
const
uint64_t
ulsch_in_slot_bitmap
=
(
1
<<
8
);
memset
(
RC
.
nrmac
[
module_idP
]
->
cce_list
[
bwp_id
][
0
],
0
,
MAX_NUM_CCE
*
sizeof
(
int
));
// coreset0
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
908c8999
...
...
@@ -423,8 +423,7 @@ void nr_simple_dlsch_preprocessor(module_id_t module_id,
find_aggregation_candidates
(
&
sched_ctrl
->
aggregation_level
,
&
nr_of_candidates
,
sched_ctrl
->
search_space
);
sched_ctrl
->
coreset
=
get_coreset
(
sched_ctrl
->
active_bwp
,
sched_ctrl
->
search_space
,
1
/* dedicated */
);
sched_ctrl
->
coreset
=
get_coreset
(
sched_ctrl
->
active_bwp
,
sched_ctrl
->
search_space
,
1
/*dedicated*/
);
int
cid
=
sched_ctrl
->
coreset
->
controlResourceSetId
;
const
uint16_t
Y
=
UE_info
->
Y
[
UE_id
][
cid
][
slot
];
const
int
m
=
UE_info
->
num_pdcch_cand
[
UE_id
][
cid
];
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
908c8999
...
...
@@ -191,12 +191,9 @@ int allocate_nr_CCEs(gNB_MAC_INST *nr_mac,
const
uint16_t
N_cce
=
N_reg
/
NR_NB_REG_PER_CCE
;
const
uint16_t
M_s_max
=
nr_of_candidates
;
AssertFatal
(
m
<
nr_of_candidates
,
"PDCCH candidate index %d in CORESET %d exceeds the maximum "
"number of PDCCH candidates (%d)
\n
"
,
m
,
coreset_id
,
nr_of_candidates
);
//PDCCH candidate index m in CORESET exceeds the maximum number of PDCCH candidates
if
(
m
>=
nr_of_candidates
)
return
-
1
;
int
first_cce
=
aggregation
*
((
Y
+
CEILIDIV
((
m
*
N_cce
),(
aggregation
*
M_s_max
))
+
n_CI
)
%
CEILIDIV
(
N_cce
,
aggregation
));
...
...
@@ -1993,32 +1990,6 @@ void get_pdsch_to_harq_feedback(int Mod_idP,
}
void
find_aggregation_candidates
(
uint8_t
*
aggregation_level
,
uint8_t
*
nr_of_candidates
,
NR_SearchSpace_t
*
ss
)
{
if
(
ss
->
nrofCandidates
->
aggregationLevel1
!=
NR_SearchSpace__nrofCandidates__aggregationLevel1_n0
)
{
*
aggregation_level
=
1
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel1
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel2
!=
NR_SearchSpace__nrofCandidates__aggregationLevel2_n0
)
{
*
aggregation_level
=
2
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel2
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel4
!=
NR_SearchSpace__nrofCandidates__aggregationLevel4_n0
)
{
*
aggregation_level
=
4
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel4
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel8
!=
NR_SearchSpace__nrofCandidates__aggregationLevel8_n0
)
{
*
aggregation_level
=
8
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel8
;
}
if
(
ss
->
nrofCandidates
->
aggregationLevel16
!=
NR_SearchSpace__nrofCandidates__aggregationLevel16_n0
)
{
*
aggregation_level
=
16
;
*
nr_of_candidates
=
ss
->
nrofCandidates
->
aggregationLevel16
;
}
}
/*void fill_nfapi_coresets_and_searchspaces(NR_CellGroupConfig_t *cg,
nfapi_nr_coreset_t *coreset,
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
View file @
908c8999
...
...
@@ -140,7 +140,7 @@ gNBs =
# this is SS=0 L=12
initialULBWPstartSymbolAndLength_1
=
69
;
initialULBWPk2_2
=
7
;
initialULBWPk2_2
=
14
;
initialULBWPmappingType_2
=
1
;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2
=
52
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
View file @
908c8999
...
...
@@ -142,7 +142,7 @@ gNBs =
# this is SS=0 L=12
initialULBWPstartSymbolAndLength_1
=
69
;
initialULBWPk2_2
=
7
;
initialULBWPk2_2
=
14
;
initialULBWPmappingType_2
=
1
;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2
=
52
;
...
...
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