Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
df201f97
Commit
df201f97
authored
Sep 06, 2018
by
Guy De Souza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Time alloc assertions/ Inline resource alloc params functions
parent
1152e9f0
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
123 additions
and
11 deletions
+123
-11
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-0
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
+10
-4
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+7
-0
openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
+104
-7
No files found.
cmake_targets/CMakeLists.txt
View file @
df201f97
...
...
@@ -1292,6 +1292,8 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_pbch.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_dci.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_dci_tools.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_dlsch.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_dlsch_tools.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gold.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cadd_vv.c
...
...
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
View file @
df201f97
...
...
@@ -171,9 +171,9 @@ typedef struct {
}
nfapi_nr_rach_config_t
;
typedef
struct
{
nfapi_uint16_tlv_t
dmrs_
TypeA_P
osition
;
///// Position of (first) DL DM-RS
nfapi_uint16_tlv_t
TimeDomainResourceAllocation
_k0
;
///// L1 parameter 'K0'
nfapi_uint16_tlv_t
TimeDomainResourceAllocation_mappingT
ype
;
///// L1 parameter 'Mapping-type'
nfapi_uint16_tlv_t
dmrs_
typeA_p
osition
;
///// Position of (first) DL DM-RS
nfapi_uint16_tlv_t
time_domain_alloc
_k0
;
///// L1 parameter 'K0'
nfapi_uint16_tlv_t
time_domain_alloc_mapping_t
ype
;
///// L1 parameter 'Mapping-type'
}
nfapi_nr_pdsch_config_t
;
typedef
struct
{
...
...
@@ -309,9 +309,15 @@ typedef enum {
typedef
enum
{
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
=
0
,
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_B
,
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
,
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_ALLOC_LIST
}
nfapi_nr_pdsch_time_domain_alloc_type_e
;
typedef
enum
{
NFAPI_NR_PDSCH_MAPPING_TYPE_A
=
0
,
NFAPI_NR_PDSCH_MAPPING_TYPE_B
}
nfapi_nr_pdsch_mapping_type_e
;
// P7 Sub Structures
typedef
struct
{
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
df201f97
...
...
@@ -33,3 +33,10 @@
#include "PHY/defs_gNB.h"
void
nr_get_time_domain_allocation_type
(
nfapi_nr_config_request_t
config
,
NR_gNB_DCI_ALLOC_t
dci_alloc
,
NR_gNB_DLSCH_t
*
dlsch
);
void
nr_check_time_alloc
(
uint8_t
S
,
uint8_t
L
,
nfapi_nr_config_request_t
config
);
uint8_t
nr_get_S
(
uint8_t
row_idx
,
uint8_t
CP
,
uint8_t
time_alloc_type
,
uint8_t
dmrs_mapping_type
);
openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
View file @
df201f97
...
...
@@ -32,21 +32,35 @@
#include "nr_dlsch.h"
uint8_t
nr_pdsch_default_time_alloc_A_S_nCP
[
23
]
=
{
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
9
,
10
,
4
,
6
,
5
,
5
,
9
,
12
,
1
,
1
,
2
,
4
,
8
};
uint8_t
nr_pdsch_default_time_alloc_A_L_nCP
[
23
]
=
{
12
,
11
,
10
,
9
,
9
,
8
,
7
,
6
,
5
,
4
,
4
,
4
,
4
,
4
,
7
,
2
,
2
,
2
,
13
,
6
,
4
,
7
,
4
};
uint8_t
nr_pdsch_default_time_alloc_A_S_eCP
[
23
]
=
{
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
6
,
8
,
4
,
6
,
5
,
5
,
9
,
10
,
1
,
1
,
2
,
4
,
8
};
uint8_t
nr_pdsch_default_time_alloc_A_L_eCP
[
23
]
=
{
6
,
5
,
10
,
9
,
9
,
8
,
7
,
6
,
5
,
4
,
4
,
2
,
4
,
4
,
6
,
2
,
2
,
2
,
11
,
6
,
4
,
6
,
4
};
uint8_t
nr_pdsch_default_time_alloc_B_S
[
16
]
=
{
2
,
4
,
6
,
8
,
10
,
2
,
4
,
2
,
4
,
6
,
8
,
10
,
2
,
2
,
3
,
2
};
uint8_t
nr_pdsch_default_time_alloc_B_L
[
16
]
=
{
2
,
2
,
2
,
2
,
2
,
2
,
2
,
4
,
4
,
4
,
4
,
4
,
7
,
12
,
11
,
4
};
uint8_t
nr_pdsch_default_time_alloc_C_S
[
15
]
=
{
2
,
4
,
6
,
8
,
10
,
2
,
4
,
6
,
8
,
10
,
2
,
2
,
3
,
0
,
2
};
uint8_t
nr_pdsch_default_time_alloc_C_L
[
15
]
=
{
2
,
2
,
2
,
2
,
2
,
4
,
4
,
4
,
4
,
4
,
7
,
12
,
11
,
6
,
6
};
void
nr_get_time_domain_allocation_type
(
nfapi_nr_config_request_t
config
,
NR_gNB_DCI_ALLOC_t
dci_alloc
,
NR_gNB_DLSCH_t
*
dlsch
)
{
nfapi_nr_ssb_and_cset_mux_pattern_type_e
mux_pattern
=
dci_alloc
.
mux_pattern
;
nfapi_nr_ssb_and_cset_mux_pattern_type_e
mux_pattern
=
dci_alloc
.
pdcch_params
.
mux_pattern
;
switch
(
dci_alloc
.
rnti_type
)
{
switch
(
dci_alloc
.
pdcch_params
.
rnti_type
)
{
case
NFAPI_NR_RNTI_SI
:
AssertFatal
(
dci_alloc
.
pdcch_params
.
common_search_space_type
==
NFAPI_NR_COMMON_SEARCH_SPACE_TYPE_0
,
"Invalid common search space type %d for SI RNTI, expected %d
\n
"
,
dci_alloc
.
pdcch_params
.
common_search_space_type
,
NFAPI_NR_COMMON_SEARCH_SPACE_TYPE_0
);
if
(
mux_pattern
==
NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1
)
AssertFatal
(
config
.
subframe_config
.
dl_cyclic_prefix_type
.
value
==
NFAPI_CP_NORMAL
,
"Invalid configuration CP extended for SI RNTI type 0 search space
\n
"
);
dlsch
->
time_alloc_type
=
(
mux_pattern
==
NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1
)
?
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
:
(
mux_pattern
==
NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE2
)
?
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_B
:
(
mux_pattern
==
NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE3
)
?
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
;
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
;
break
;
case
NFAPI_NR_RNTI_RA
:
...
...
@@ -54,8 +68,7 @@ void nr_get_time_domain_allocation_type(nfapi_nr_config_request_t config,
/*AssertFatal(dci_alloc.pdcch_params.common_search_space_type == NFAPI_NR_COMMON_SEARCH_SPACE_TYPE_1,
"Invalid common search space type %d for RNTI %d, expected %d\n",dci_alloc.pdcch_params.common_search_space_type,
NFAPI_NR_COMMON_SEARCH_SPACE_TYPE_1, dci_alloc.rnti_type);*/
if
(
!
dlsch
->
time_alloc_list_flag
)
dlsch
->
time_alloc_type
=
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
;
dlsch
->
time_alloc_type
=
(
dlsch
->
time_alloc_list_flag
)
?
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_ALLOC_LIST
:
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
;
break
;
case
NFAPI_NR_RNTI_P
:
...
...
@@ -63,12 +76,96 @@ void nr_get_time_domain_allocation_type(nfapi_nr_config_request_t config,
case
NFAPI_NR_RNTI_C
:
case
NFAPI_NR_RNTI_CS
:
if
()
if
(
dci_alloc
.
pdcch_params
.
search_space_type
==
NFAPI_NR_SEARCH_SPACE_TYPE_COMMON
)
dlsch
->
time_alloc_type
=
(
dlsch
->
time_alloc_list_flag
)
?
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_ALLOC_LIST
:
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
;
else
dlsch
->
time_alloc_type
=
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_ALLOC_LIST
;
break
;
}
}
static
inline
uint16_t
get_SLIV
(
uint8_t
S
,
uint8_t
L
)
{
return
(
(
uint16_t
)(((
L
-
1
)
<=
7
)
?
(
14
*
(
L
-
1
)
+
S
)
:
(
14
*
(
15
-
L
)
+
(
13
-
S
)))
);
}
static
inline
uint8_t
get_K0
(
uint8_t
row_idx
,
uint8_t
time_alloc_type
)
{
return
(
(
time_alloc_type
==
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
)
||
(
time_alloc_type
==
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
)
?
0
:
((
row_idx
==
6
)
||
(
row_idx
==
7
)
||
(
row_idx
==
15
))
?
1
:
0
);
}
/*ideally combine the calculation of L in the same function once the right struct is defined*/
uint8_t
nr_get_S
(
uint8_t
row_idx
,
uint8_t
CP
,
uint8_t
time_alloc_type
,
uint8_t
dmrs_typeA_position
)
{
uint8_t
idx
,
S
;
switch
(
time_alloc_type
)
{
case
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_A
:
idx
=
(
row_idx
>
7
)
?
(
row_idx
+
6
)
:
(((
row_idx
-
1
)
<<
1
)
-
1
+
((
dmrs_typeA_position
==
2
)
?
0
:
1
));
return
((
CP
==
NFAPI_CP_NORMAL
)
?
nr_pdsch_default_time_alloc_A_S_nCP
[
idx
]
:
nr_pdsch_default_time_alloc_A_S_eCP
[
idx
]);
break
;
case
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_B
:
idx
=
(
row_idx
<
14
)
?
(
row_idx
-
1
)
:
(
row_idx
==
14
)
?
row_idx
-
1
+
((
dmrs_typeA_position
==
2
)
?
0
:
1
)
:
15
;
return
(
nr_pdsch_default_time_alloc_B_S
[
idx
]);
break
;
case
case
NFAPI_NR_PDSCH_TIME_DOMAIN_ALLOC_TYPE_DEFAULT_C
:
AssertFatal
((
row_idx
!=
6
)
&&
(
row_idx
!=
7
)
&&
(
row_idx
<
17
),
"Invalid row index %d in %s %s
\n
"
,
row_idx
,
__FUNCTION__
,
__FILE__
);
idx
=
(
row_idx
<
6
)
?
(
row_idx
-
1
)
:
(
row_idx
<
14
)
?
(
row_idx
-
3
)
:
(
row_idx
==
14
)
?
row_idx
-
3
+
((
dmrs_typeA_position
==
2
)
?
0
:
1
)
:
(
row_idx
-
2
);
break
;
default:
AssertFatal
(
0
,
"Invalid Time domain allocation type %d in %s %s
\n
"
,
time_alloc_type
,
__FUNCTION__
,
__FILE__
);
}
}
void
nr_check_time_alloc
(
uint8_t
S
,
uint8_t
L
,
nfapi_nr_config_request_t
config
)
{
switch
(
config
.
subframe_config
.
dl_cyclic_prefix_type
.
value
)
{
case
NFAPI_CP_NORMAL
:
if
(
config
.
pdsch_config
.
time_domain_alloc_mapping_type
.
value
==
NFAPI_NR_PDSCH_MAPPING_TYPE_A
)
{
AssertFatal
(
S
<
4
,
"Invalid value of S(%d) for mapping type A and normal CP
\n
"
,
S
);
if
(
S
==
3
)
AssertFatal
(
config
.
pdsch_config
.
dmrs_typeA_position
.
value
==
3
,
"Invalid S %d for dmrs_typeA_position %d
\n
"
,
S
,
config
.
pdsch_config
.
dmrs_typeA_position
);
AssertFatal
((
L
>
2
)
&&
(
L
<
15
),
"Invalid L %d for mapping type A and normal CP
\n
"
,
L
);
AssertFatal
(((
S
+
L
)
>
2
)
&&
((
S
+
L
)
<
15
),
"Invalid S+L %d for mapping type A and normal CP
\n
"
,
S
+
L
);
}
else
{
AssertFatal
(
S
<
13
,
"Invalid value of S(%d) for mapping type B and normal CP
\n
"
,
S
);
AssertFatal
((
L
>
1
)
&&
(
L
<
8
),
"Invalid L %d for mapping type B and normal CP
\n
"
,
L
);
AssertFatal
(((
S
+
L
)
>
1
)
&&
((
S
+
L
)
<
15
),
"Invalid S+L %d for mapping type B and normal CP
\n
"
,
S
+
L
);
}
break
;
case
NFAPI_CP_EXTENDED
:
if
(
config
.
pdsch_config
.
time_domain_alloc_mapping_type
.
value
==
NFAPI_NR_PDSCH_MAPPING_TYPE_A
)
{
AssertFatal
(
S
<
4
,
"Invalid value of S(%d) for mapping type A and extended CP
\n
"
,
S
);
if
(
S
==
3
)
AssertFatal
(
config
.
pdsch_config
.
dmrs_typeA_position
.
value
==
3
,
"Invalid S %d for dmrs_typeA_position %d
\n
"
,
S
,
config
.
pdsch_config
.
dmrs_typeA_position
);
AssertFatal
((
L
>
2
)
&&
(
L
<
13
),
"Invalid L %d for mapping type A and extended CP
\n
"
,
L
);
AssertFatal
(((
S
+
L
)
>
2
)
&&
((
S
+
L
)
<
13
),
"Invalid S+L %d for mapping type A and extended CP
\n
"
,
S
+
L
);
}
else
{
AssertFatal
(
S
<
11
,
"Invalid value of S(%d) for mapping type B and extended CP
\n
"
,
S
);
AssertFatal
((
L
>
1
)
&&
(
L
<
7
),
"Invalid L %d for mapping type B and extended CP
\n
"
,
L
);
AssertFatal
(((
S
+
L
)
>
1
)
&&
((
S
+
L
)
<
13
),
"Invalid S+L %d for mapping type B and extended CP
\n
"
,
S
+
L
);
}
break
;
}
}
...
...
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