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
常顺宇
OpenXG-RAN
Commits
68fd55b2
Commit
68fd55b2
authored
Aug 19, 2020
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added PDCCH lists to L1 processing to remove race condition between FAPI and L1 threads
parent
3e767fae
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
131 additions
and
40 deletions
+131
-40
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+7
-0
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+10
-5
openair1/PHY/NR_TRANSPORT/nr_dci.h
openair1/PHY/NR_TRANSPORT/nr_dci.h
+13
-6
openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
+60
-12
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+15
-2
openair1/SCHED_NR/fapi_nr_l1.c
openair1/SCHED_NR/fapi_nr_l1.c
+4
-6
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+20
-7
openair2/COMMON/platform_constants.h
openair2/COMMON/platform_constants.h
+2
-2
No files found.
openair1/PHY/INIT/nr_init.c
View file @
68fd55b2
...
@@ -506,6 +506,13 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
...
@@ -506,6 +506,13 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
LOG_I
(
PHY
,
"Initialise nr transport
\n
"
);
LOG_I
(
PHY
,
"Initialise nr transport
\n
"
);
uint16_t
grid_size
=
cfg
->
carrier_config
.
dl_grid_size
[
fp
->
numerology_index
].
value
;
uint16_t
grid_size
=
cfg
->
carrier_config
.
dl_grid_size
[
fp
->
numerology_index
].
value
;
for
(
i
=
0
;
i
<
NUMBER_OF_NR_PDCCH_MAX
;
i
++
)
{
LOG_I
(
PHY
,
"Initializing PDCCH list for PDCCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_PDCCH_MAX
);
gNB
->
pdcch_pdu
[
i
].
frame
=-
1
;
LOG_I
(
PHY
,
"Initializing UL PDCCH list for UL PDCCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_PDCCH_MAX
);
gNB
->
ul_pdcch_pdu
[
i
].
frame
=-
1
;
}
for
(
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
)
{
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for PUCCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_PUCCH_MAX
);
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for PUCCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_PUCCH_MAX
);
gNB
->
pucch
[
i
]
=
new_gNB_pucch
();
gNB
->
pucch
[
i
]
=
new_gNB_pucch
();
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.c
View file @
68fd55b2
...
@@ -154,8 +154,10 @@ void nr_pdcch_scrambling(uint32_t *in,
...
@@ -154,8 +154,10 @@ void nr_pdcch_scrambling(uint32_t *in,
}
}
uint8_t
nr_generate_dci_top
(
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
,
nfapi_nr_ul_dci_request_pdus_t
*
ul_dci_pdu
,
uint8_t
nr_generate_dci_top
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
,
nfapi_nr_dl_tti_pdcch_pdu
*
ul_dci_pdu
,
uint32_t
**
gold_pdcch_dmrs
,
uint32_t
**
gold_pdcch_dmrs
,
int32_t
*
txdataF
,
int32_t
*
txdataF
,
int16_t
amp
,
int16_t
amp
,
...
@@ -180,15 +182,17 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
...
@@ -180,15 +182,17 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
if
(
pdcch_pdu
)
pdcch_pdu_rel15
=
&
pdcch_pdu
->
pdcch_pdu_rel15
;
if
(
pdcch_pdu
)
pdcch_pdu_rel15
=
&
pdcch_pdu
->
pdcch_pdu_rel15
;
else
if
(
ul_dci_pdu
)
pdcch_pdu_rel15
=
&
ul_dci_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
else
if
(
ul_dci_pdu
)
pdcch_pdu_rel15
=
&
ul_dci_pdu
->
pdcch_pdu_rel15
;
nr_fill_cce_list
(
gNB
,
0
,
pdcch_pdu_rel15
);
get_coreset_rballoc
(
pdcch_pdu_rel15
->
FreqDomainResource
,
&
n_rb
,
&
rb_offset
);
get_coreset_rballoc
(
pdcch_pdu_rel15
->
FreqDomainResource
,
&
n_rb
,
&
rb_offset
);
// compute rb_offset and n_prb based on frequency allocation
// compute rb_offset and n_prb based on frequency allocation
if
(
pdcch_pdu_rel15
->
CoreSetType
==
NFAPI_NR_CSET_CONFIG_MIB_SIB1
)
{
if
(
pdcch_pdu_rel15
->
CoreSetType
==
NFAPI_NR_CSET_CONFIG_MIB_SIB1
)
{
cset_start_sc
=
frame_parms
.
first_carrier_offset
+
(
frame_parms
.
ssb_start_subcarrier
/
NR_NB_SC_PER_RB
+
cset_start_sc
=
frame_parms
.
first_carrier_offset
+
rb_offset
)
*
NR_NB_SC_PER_RB
;
(
frame_parms
.
ssb_start_subcarrier
/
NR_NB_SC_PER_RB
+
rb_offset
)
*
NR_NB_SC_PER_RB
;
}
else
}
else
cset_start_sc
=
frame_parms
.
first_carrier_offset
+
rb_offset
*
NR_NB_SC_PER_RB
;
cset_start_sc
=
frame_parms
.
first_carrier_offset
+
rb_offset
*
NR_NB_SC_PER_RB
;
...
@@ -324,6 +328,7 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
...
@@ -324,6 +328,7 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
k
-=
frame_parms
.
ofdm_symbol_size
;
k
-=
frame_parms
.
ofdm_symbol_size
;
}
// m
}
// m
}
// reg_idx
}
// reg_idx
}
// for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++)
}
// for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++)
return
0
;
return
0
;
}
}
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.h
View file @
68fd55b2
...
@@ -29,8 +29,9 @@ uint16_t nr_get_dci_size(nfapi_nr_dci_format_e format,
...
@@ -29,8 +29,9 @@ uint16_t nr_get_dci_size(nfapi_nr_dci_format_e format,
nfapi_nr_rnti_type_e
rnti_type
,
nfapi_nr_rnti_type_e
rnti_type
,
uint16_t
N_RB
);
uint16_t
N_RB
);
uint8_t
nr_generate_dci_top
(
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
,
uint8_t
nr_generate_dci_top
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_ul_dci_request_pdus_t
*
ul_dci_pdu
,
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
,
nfapi_nr_dl_tti_pdcch_pdu
*
ul_pdcch_pdu
,
uint32_t
**
gold_pdcch_dmrs
,
uint32_t
**
gold_pdcch_dmrs
,
int32_t
*
txdataF
,
int32_t
*
txdataF
,
int16_t
amp
,
int16_t
amp
,
...
@@ -42,15 +43,21 @@ void nr_pdcch_scrambling(uint32_t *in,
...
@@ -42,15 +43,21 @@ void nr_pdcch_scrambling(uint32_t *in,
uint32_t
n_RNTI
,
uint32_t
n_RNTI
,
uint32_t
*
out
);
uint32_t
*
out
);
int16_t
find_nr_pdcch
(
int
frame
,
int
slot
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
);
void
nr_fill_dci
(
PHY_VARS_gNB
*
gNB
,
void
nr_fill_dci
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
frame
,
int
slot
);
int
slot
,
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
);
int16_t
find_nr_ul_dci
(
int
frame
,
int
slot
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
);
void
nr_fill_ul_dci
(
PHY_VARS_gNB
*
gNB
,
void
nr_fill_ul_dci
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
frame
,
int
slot
);
int
slot
,
nfapi_nr_ul_dci_request_pdus_t
*
pdcch_pdu
);
void
nr_fill_cce_list
(
PHY_VARS_gNB
*
gNB
,
uint8_t
m
);
void
nr_fill_cce_list
(
PHY_VARS_gNB
*
gNB
,
uint8_t
m
,
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
);
void
get_coreset_rballoc
(
uint8_t
*
FreqDomainResource
,
int
*
n_rb
,
int
*
rb_offset
);
void
get_coreset_rballoc
(
uint8_t
*
FreqDomainResource
,
int
*
n_rb
,
int
*
rb_offset
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
View file @
68fd55b2
...
@@ -118,15 +118,11 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint16_t n_shift, uint8_t m) {
...
@@ -118,15 +118,11 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint16_t n_shift, uint8_t m) {
*/
*/
void
nr_fill_cce_list
(
PHY_VARS_gNB
*
gNB
,
uint8_t
m
)
{
void
nr_fill_cce_list
(
PHY_VARS_gNB
*
gNB
,
uint8_t
m
,
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
)
{
nr_cce_t
*
cce
;
nr_cce_t
*
cce
;
nr_reg_t
*
reg
;
nr_reg_t
*
reg
;
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
;
if
(
gNB
->
pdcch_pdu
!=
NULL
)
pdcch_pdu_rel15
=
&
gNB
->
pdcch_pdu
->
pdcch_pdu_rel15
;
else
pdcch_pdu_rel15
=
&
gNB
->
ul_dci_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
int
bsize
=
pdcch_pdu_rel15
->
RegBundleSize
;
int
bsize
=
pdcch_pdu_rel15
->
RegBundleSize
;
int
R
=
pdcch_pdu_rel15
->
InterleaverSize
;
int
R
=
pdcch_pdu_rel15
->
InterleaverSize
;
int
n_shift
=
pdcch_pdu_rel15
->
ShiftIndex
;
int
n_shift
=
pdcch_pdu_rel15
->
ShiftIndex
;
...
@@ -143,6 +139,8 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
...
@@ -143,6 +139,8 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
int
N_reg
=
n_rb
*
pdcch_pdu_rel15
->
DurationSymbols
;
int
N_reg
=
n_rb
*
pdcch_pdu_rel15
->
DurationSymbols
;
int
C
=-
1
;
int
C
=-
1
;
AssertFatal
(
N_reg
>
0
,
"N_reg cannot be 0
\n
"
);
for
(
int
d
=
0
;
d
<
pdcch_pdu_rel15
->
numDlDci
;
d
++
)
{
for
(
int
d
=
0
;
d
<
pdcch_pdu_rel15
->
numDlDci
;
d
++
)
{
int
L
=
pdcch_pdu_rel15
->
dci_pdu
.
AggregationLevel
[
d
];
int
L
=
pdcch_pdu_rel15
->
dci_pdu
.
AggregationLevel
[
d
];
...
@@ -204,14 +202,38 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
...
@@ -204,14 +202,38 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
ret |= ((field>>i)&1)<<(size-i-1);
ret |= ((field>>i)&1)<<(size-i-1);
return ret;
return ret;
}*/
}*/
int16_t
find_nr_pdcch
(
int
frame
,
int
slot
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
)
{
uint16_t
i
;
int16_t
first_free_index
=-
1
;
AssertFatal
(
gNB
!=
NULL
,
"gNB is null
\n
"
);
for
(
i
=
0
;
i
<
NUMBER_OF_NR_PDCCH_MAX
;
i
++
)
{
LOG_D
(
PHY
,
"searching for frame.slot %d.%d : pdcch_index %d frame.slot %d.%d, first_free_index %d
\n
"
,
frame
,
slot
,
i
,
gNB
->
pdcch_pdu
[
i
].
frame
,
gNB
->
pdcch_pdu
[
i
].
slot
,
first_free_index
);
if
((
gNB
->
pdcch_pdu
[
i
].
frame
==
frame
)
&&
(
gNB
->
pdcch_pdu
[
i
].
slot
==
slot
))
return
i
;
else
if
(
gNB
->
pdcch_pdu
[
i
].
frame
==-
1
&&
first_free_index
==-
1
)
first_free_index
=
i
;
}
if
(
type
==
SEARCH_EXIST
)
return
-
1
;
return
first_free_index
;
}
void
nr_fill_dci
(
PHY_VARS_gNB
*
gNB
,
void
nr_fill_dci
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
frame
,
int
slot
)
{
int
slot
,
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
)
{
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
gNB
->
pdcch_pdu
->
pdcch_pdu_rel15
;
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
pdcch_pdu
->
pdcch_pdu_rel15
;
NR_gNB_DLSCH_t
*
dlsch
;
NR_gNB_DLSCH_t
*
dlsch
;
int
pdcch_id
=
find_nr_pdcch
(
frame
,
slot
,
gNB
,
SEARCH_EXIST_OR_FREE
);
AssertFatal
(
pdcch_id
>=
0
&&
pdcch_id
<
NUMBER_OF_NR_PDCCH_MAX
,
"Cannot find space for PDCCH, exiting
\n
"
);
memcpy
((
void
*
)
&
gNB
->
pdcch_pdu
[
pdcch_id
].
pdcch_pdu
,(
void
*
)
pdcch_pdu
,
sizeof
(
*
pdcch_pdu
));
gNB
->
pdcch_pdu
[
pdcch_id
].
frame
=
frame
;
gNB
->
pdcch_pdu
[
pdcch_id
].
slot
=
slot
;
for
(
int
i
=
0
;
i
<
pdcch_pdu_rel15
->
numDlDci
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pdcch_pdu_rel15
->
numDlDci
;
i
++
)
{
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
...
@@ -234,7 +256,7 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
...
@@ -234,7 +256,7 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
dlsch
->
harq_mask
|=
(
1
<<
harq_pid
);
dlsch
->
harq_mask
|=
(
1
<<
harq_pid
);
dlsch
->
rnti
=
pdcch_pdu_rel15
->
dci_pdu
.
RNTI
[
i
];
dlsch
->
rnti
=
pdcch_pdu_rel15
->
dci_pdu
.
RNTI
[
i
];
nr_fill_cce_list
(
gNB
,
0
);
//
nr_fill_cce_list(gNB,0);
/*
/*
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
...
@@ -243,19 +265,45 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
...
@@ -243,19 +265,45 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
}
}
}
}
int16_t
find_nr_ul_dci
(
int
frame
,
int
slot
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
)
{
uint16_t
i
;
int16_t
first_free_index
=-
1
;
AssertFatal
(
gNB
!=
NULL
,
"gNB is null
\n
"
);
for
(
i
=
0
;
i
<
NUMBER_OF_NR_PDCCH_MAX
;
i
++
)
{
LOG_D
(
PHY
,
"searching for frame.slot %d.%d : ul_pdcch_index %d frame.slot %d.%d, first_free_index %d
\n
"
,
frame
,
slot
,
i
,
gNB
->
ul_pdcch_pdu
[
i
].
frame
,
gNB
->
ul_pdcch_pdu
[
i
].
slot
,
first_free_index
);
if
((
gNB
->
ul_pdcch_pdu
[
i
].
frame
==
frame
)
&&
(
gNB
->
ul_pdcch_pdu
[
i
].
slot
==
slot
))
return
i
;
else
if
(
gNB
->
ul_pdcch_pdu
[
i
].
frame
==-
1
&&
first_free_index
==-
1
)
first_free_index
=
i
;
}
if
(
type
==
SEARCH_EXIST
)
return
-
1
;
return
first_free_index
;
}
void
nr_fill_ul_dci
(
PHY_VARS_gNB
*
gNB
,
void
nr_fill_ul_dci
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
frame
,
int
slot
)
{
int
slot
,
nfapi_nr_ul_dci_request_pdus_t
*
pdcch_pdu
)
{
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
gNB
->
ul_dci
_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
pdcch
_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
int
pdcch_id
=
find_nr_ul_dci
(
frame
,
slot
,
gNB
,
SEARCH_EXIST_OR_FREE
);
AssertFatal
(
pdcch_id
>=
0
&&
pdcch_id
<
NUMBER_OF_NR_PDCCH_MAX
,
"Cannot find space for UL PDCCH, exiting
\n
"
);
memcpy
((
void
*
)
&
gNB
->
ul_pdcch_pdu
[
pdcch_id
].
pdcch_pdu
,(
void
*
)
pdcch_pdu
,
sizeof
(
*
pdcch_pdu
));
gNB
->
ul_pdcch_pdu
[
pdcch_id
].
frame
=
frame
;
gNB
->
ul_pdcch_pdu
[
pdcch_id
].
slot
=
slot
;
for
(
int
i
=
0
;
i
<
pdcch_pdu_rel15
->
numDlDci
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pdcch_pdu_rel15
->
numDlDci
;
i
++
)
{
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
// if there's no DL DCI then generate CCE list
// if there's no DL DCI then generate CCE list
nr_fill_cce_list
(
gNB
,
0
);
//
nr_fill_cce_list(gNB,0);
/*
/*
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
...
...
openair1/PHY/defs_gNB.h
View file @
68fd55b2
...
@@ -112,6 +112,17 @@ typedef struct {
...
@@ -112,6 +112,17 @@ typedef struct {
uint32_t
F
;
uint32_t
F
;
}
NR_DL_gNB_HARQ_t
;
}
NR_DL_gNB_HARQ_t
;
typedef
struct
{
int
frame
;
int
slot
;
nfapi_nr_dl_tti_pdcch_pdu
pdcch_pdu
;
}
NR_gNB_PDCCH_t
;
typedef
struct
{
int
frame
;
int
slot
;
nfapi_nr_ul_dci_request_pdus_t
pdcch_pdu
;
}
NR_gNB_UL_PDCCH_t
;
typedef
struct
{
typedef
struct
{
/// Pointers to 16 HARQ processes for the DLSCH
/// Pointers to 16 HARQ processes for the DLSCH
...
@@ -676,8 +687,8 @@ typedef struct PHY_VARS_gNB_s {
...
@@ -676,8 +687,8 @@ typedef struct PHY_VARS_gNB_s {
nfapi_nr_ul_tti_request_t
UL_tti_req
;
nfapi_nr_ul_tti_request_t
UL_tti_req
;
nfapi_nr_uci_indication_t
uci_indication
;
nfapi_nr_uci_indication_t
uci_indication
;
nfapi_nr_dl_tti_pdcch_pdu
*
pdcch_pdu
;
//
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu;
nfapi_nr_ul_dci_request_pdus_t
*
ul_dci_pdu
;
//
nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu;
nfapi_nr_dl_tti_ssb_pdu
ssb_pdu
;
nfapi_nr_dl_tti_ssb_pdu
ssb_pdu
;
int
num_pdsch_rnti
;
int
num_pdsch_rnti
;
...
@@ -687,6 +698,8 @@ typedef struct PHY_VARS_gNB_s {
...
@@ -687,6 +698,8 @@ typedef struct PHY_VARS_gNB_s {
NR_gNB_PRACH
prach_vars
;
NR_gNB_PRACH
prach_vars
;
NR_gNB_PUSCH
*
pusch_vars
[
NUMBER_OF_NR_ULSCH_MAX
];
NR_gNB_PUSCH
*
pusch_vars
[
NUMBER_OF_NR_ULSCH_MAX
];
NR_gNB_PUCCH_t
*
pucch
[
NUMBER_OF_NR_PUCCH_MAX
];
NR_gNB_PUCCH_t
*
pucch
[
NUMBER_OF_NR_PUCCH_MAX
];
NR_gNB_PDCCH_t
pdcch_pdu
[
NUMBER_OF_NR_PDCCH_MAX
];
NR_gNB_UL_PDCCH_t
ul_pdcch_pdu
[
NUMBER_OF_NR_PDCCH_MAX
];
NR_gNB_DLSCH_t
*
dlsch
[
NUMBER_OF_NR_DLSCH_MAX
][
2
];
// Nusers times two spatial streams
NR_gNB_DLSCH_t
*
dlsch
[
NUMBER_OF_NR_DLSCH_MAX
][
2
];
// Nusers times two spatial streams
NR_gNB_ULSCH_t
*
ulsch
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
// [Nusers times][2 codewords]
NR_gNB_ULSCH_t
*
ulsch
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
// [Nusers times][2 codewords]
NR_gNB_DLSCH_t
*
dlsch_SI
,
*
dlsch_ra
,
*
dlsch_p
;
NR_gNB_DLSCH_t
*
dlsch_SI
,
*
dlsch_ra
,
*
dlsch_p
;
...
...
openair1/SCHED_NR/fapi_nr_l1.c
View file @
68fd55b2
...
@@ -94,9 +94,9 @@ void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
...
@@ -94,9 +94,9 @@ void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
LOG_D
(
PHY
,
"Frame %d, Slot %d: DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d
\n
"
,
frame
,
slot
,
slot
,
pdcch_pdu
->
pdcch_pdu_rel15
.
numDlDci
);
LOG_D
(
PHY
,
"Frame %d, Slot %d: DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d
\n
"
,
frame
,
slot
,
slot
,
pdcch_pdu
->
pdcch_pdu_rel15
.
numDlDci
);
// copy dci configuration into gNB structure
// copy dci configuration into gNB structure
gNB
->
pdcch_pdu
=
pdcch_pdu
;
//
gNB->pdcch_pdu = pdcch_pdu;
nr_fill_dci
(
gNB
,
frame
,
slot
);
nr_fill_dci
(
gNB
,
frame
,
slot
,
pdcch_pdu
);
...
@@ -109,9 +109,9 @@ void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
...
@@ -109,9 +109,9 @@ void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
LOG_D
(
PHY
,
"Frame %d, Slot %d: UL DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d
\n
"
,
frame
,
slot
,
slot
,
ul_dci_request_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
.
numDlDci
);
LOG_D
(
PHY
,
"Frame %d, Slot %d: UL DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d
\n
"
,
frame
,
slot
,
slot
,
ul_dci_request_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
.
numDlDci
);
// copy dci configuration into gNB structure
// copy dci configuration into gNB structure
gNB
->
ul_dci_pdu
=
ul_dci_request_pdu
;
//
gNB->ul_dci_pdu = ul_dci_request_pdu;
nr_fill_ul_dci
(
gNB
,
frame
,
slot
);
nr_fill_ul_dci
(
gNB
,
frame
,
slot
,
ul_dci_request_pdu
);
}
}
...
@@ -159,8 +159,6 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
...
@@ -159,8 +159,6 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
gNB
->
dlsch
[
i
][
0
]
->
rnti
=
0
;
gNB
->
dlsch
[
i
][
0
]
->
rnti
=
0
;
gNB
->
dlsch
[
i
][
0
]
->
harq_mask
=
0
;
gNB
->
dlsch
[
i
][
0
]
->
harq_mask
=
0
;
}
}
gNB
->
pdcch_pdu
=
NULL
;
gNB
->
ul_dci_pdu
=
NULL
;
gNB
->
pbch_configured
=
0
;
gNB
->
pbch_configured
=
0
;
for
(
int
i
=
0
;
i
<
number_dl_pdu
;
i
++
)
{
for
(
int
i
=
0
;
i
<
number_dl_pdu
;
i
++
)
{
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
68fd55b2
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_TRANSPORT/nr_dci.h"
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
#include "PHY/NR_UE_TRANSPORT/pucch_nr.h"
#include "PHY/NR_UE_TRANSPORT/pucch_nr.h"
#include "SCHED/sched_eNB.h"
#include "SCHED/sched_eNB.h"
...
@@ -160,22 +161,34 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
...
@@ -160,22 +161,34 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX
,
0
);
int
pdcch_pdu_id
=
find_nr_pdcch
(
frame
,
slot
,
gNB
,
SEARCH_EXIST
);
int
ul_pdcch_pdu_id
=
find_nr_ul_dci
(
frame
,
slot
,
gNB
,
SEARCH_EXIST
);
if
(
gNB
->
pdcch_pdu
||
gNB
->
ul_dci_pdu
)
{
LOG_D
(
PHY
,
"[gNB %d] Frame %d slot %d, pdcch_pdu_id %d, ul_pdcch_pdu_id %d
\n
"
,
LOG_I
(
PHY
,
"[gNB %d] Frame %d slot %d Calling nr_generate_dci_top (number of UL/DL DCI %d/%d)
\n
"
,
gNB
->
Mod_id
,
frame
,
slot
,
pdcch_pdu_id
,
ul_pdcch_pdu_id
);
if
(
pdcch_pdu_id
>=
0
||
ul_pdcch_pdu_id
>=
0
)
{
LOG_D
(
PHY
,
"[gNB %d] Frame %d slot %d Calling nr_generate_dci_top (number of UL/DL DCI %d/%d)
\n
"
,
gNB
->
Mod_id
,
frame
,
slot
,
gNB
->
Mod_id
,
frame
,
slot
,
gNB
->
ul_dci_pdu
==
NULL
?
0
:
gNB
->
ul_dci_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
.
numDlDci
,
ul_pdcch_pdu_id
==
0
?
0
:
gNB
->
ul_pdcch_pdu
[
ul_pdcch_pdu_id
].
pdcch_pdu
.
pdcch_pdu
.
pdcch_pdu_rel15
.
numDlDci
,
gNB
->
pdcch_pdu
==
NULL
?
0
:
gNB
->
pdcch_pdu
->
pdcch_pdu_rel15
.
numDlDci
);
pdcch_pdu_id
==
0
?
0
:
gNB
->
pdcch_pdu
[
pdcch_pdu_id
].
pdcch_pdu
.
pdcch_pdu_rel15
.
numDlDci
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX
,
1
);
nr_generate_dci_top
(
gNB
->
pdcch_pdu
,
nr_generate_dci_top
(
gNB
,
gNB
->
ul_dci_pdu
,
pdcch_pdu_id
>=
0
?
&
gNB
->
pdcch_pdu
[
pdcch_pdu_id
].
pdcch_pdu
:
NULL
,
ul_pdcch_pdu_id
>=
0
?
&
gNB
->
ul_pdcch_pdu
[
ul_pdcch_pdu_id
].
pdcch_pdu
.
pdcch_pdu
:
NULL
,
gNB
->
nr_gold_pdcch_dmrs
[
slot
],
gNB
->
nr_gold_pdcch_dmrs
[
slot
],
&
gNB
->
common_vars
.
txdataF
[
0
][
txdataF_offset
],
&
gNB
->
common_vars
.
txdataF
[
0
][
txdataF_offset
],
AMP
,
*
fp
);
AMP
,
*
fp
);
// free up entry in pdcch tables
if
(
pdcch_pdu_id
>=
0
)
gNB
->
pdcch_pdu
[
pdcch_pdu_id
].
frame
=
-
1
;
if
(
ul_pdcch_pdu_id
>=
0
)
gNB
->
ul_pdcch_pdu
[
ul_pdcch_pdu_id
].
frame
=
-
1
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX
,
0
);
if
(
pdcch_pdu_id
>=
0
)
gNB
->
pdcch_pdu
[
pdcch_pdu_id
].
frame
=
-
1
;
if
(
ul_pdcch_pdu_id
>=
0
)
gNB
->
ul_pdcch_pdu
[
ul_pdcch_pdu_id
].
frame
=
-
1
;
}
}
for
(
int
i
=
0
;
i
<
gNB
->
num_pdsch_rnti
;
i
++
)
{
for
(
int
i
=
0
;
i
<
gNB
->
num_pdsch_rnti
;
i
++
)
{
...
...
openair2/COMMON/platform_constants.h
View file @
68fd55b2
...
@@ -101,9 +101,9 @@
...
@@ -101,9 +101,9 @@
#define NUMBER_OF_NR_DLSCH_MAX 2//16
#define NUMBER_OF_NR_DLSCH_MAX 2//16
#define NUMBER_OF_NR_ULSCH_MAX 2//16
#define NUMBER_OF_NR_ULSCH_MAX 2//16
#define NUMBER_OF_NR_PUCCH_MAX
2
#define NUMBER_OF_NR_PUCCH_MAX
16
#define NUMBER_OF_NR_SR_MAX 16
#define NUMBER_OF_NR_SR_MAX 16
#define NUMBER_OF_NR_PDCCH_MAX 16
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
...
...
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