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
f69824c9
Commit
f69824c9
authored
Sep 30, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/PUSCH_TA_update' into integration_2020_wk39
parents
70135e1c
df369e0c
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
104 additions
and
55 deletions
+104
-55
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+34
-2
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+9
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+3
-9
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+2
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+51
-36
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+2
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+1
-4
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
f69824c9
...
...
@@ -1603,11 +1603,9 @@ uint16_t Table_51312[28][2] = {{2,120},{2,193},{2,308},{2,449},{2,602},{4,378},{
uint16_t
Table_51313
[
29
][
2
]
=
{{
2
,
30
},{
2
,
40
},{
2
,
50
},{
2
,
64
},{
2
,
78
},{
2
,
99
},{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
4
,
340
},
{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},{
6
,
438
},{
6
,
466
},{
6
,
517
},{
6
,
567
},{
6
,
616
},{
6
,
666
},
{
6
,
719
},
{
6
,
772
}};
//Table 6.1.4.1-1 of 38.214 TODO fix for tp-pi2BPSK
uint16_t
Table_61411
[
28
][
2
]
=
{{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
2
,
679
},{
4
,
340
},{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},
{
4
,
658
},{
6
,
466
},{
6
,
517
},{
6
,
567
},{
6
,
616
},{
6
,
666
},{
6
,
719
},{
6
,
772
},{
6
,
822
},{
6
,
873
},
{
6
,
910
},
{
6
,
948
}};
//Table 6.1.4.1-2 of 38.214 TODO fix for tp-pi2BPSK
uint16_t
Table_61412
[
28
][
2
]
=
{{
2
,
30
},{
2
,
40
},{
2
,
50
},{
2
,
64
},{
2
,
78
},{
2
,
99
},{
2
,
120
},{
2
,
157
},{
2
,
193
},{
2
,
251
},{
2
,
308
},{
2
,
379
},{
2
,
449
},{
2
,
526
},{
2
,
602
},{
2
,
679
},
{
4
,
378
},{
4
,
434
},{
4
,
490
},{
4
,
553
},{
4
,
616
},{
4
,
658
},{
4
,
699
},{
4
,
772
},{
6
,
567
},{
6
,
616
},{
6
,
666
},
{
6
,
772
}};
...
...
@@ -2471,6 +2469,40 @@ int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,i
return
(
-
1
);
}
uint8_t
get_pusch_mcs_table
(
long
*
mcs_Table
,
int
is_tp
,
int
dci_format
,
int
rnti_type
,
int
target_ss
,
bool
config_grant
)
{
// implementing 6.1.4.1 in 38.214
if
(
mcs_Table
!=
NULL
)
{
if
(
config_grant
||
(
rnti_type
==
NR_RNTI_CS
))
{
if
(
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam256
)
return
1
;
else
return
(
2
+
(
is_tp
<<
1
));
}
else
{
if
((
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam256
)
&&
(
dci_format
==
NR_UL_DCI_FORMAT_0_1
)
&&
((
rnti_type
==
NR_RNTI_C
)
||
(
rnti_type
==
NR_RNTI_SP_CSI
)))
return
1
;
// TODO take into account UE configuration
if
((
*
mcs_Table
==
NR_PUSCH_Config__mcs_Table_qam64LowSE
)
&&
(
target_ss
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
)
&&
((
rnti_type
==
NR_RNTI_C
)
||
(
rnti_type
==
NR_RNTI_SP_CSI
)))
return
(
2
+
(
is_tp
<<
1
));
if
(
rnti_type
==
NR_RNTI_MCS_C
)
return
(
2
+
(
is_tp
<<
1
));
AssertFatal
(
1
==
0
,
"Invalid configuration to set MCS table"
);
}
}
else
return
(
0
+
(
is_tp
*
3
));
}
int
binomial
(
int
n
,
int
k
)
{
int
c
=
1
,
i
;
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
f69824c9
...
...
@@ -60,7 +60,8 @@ typedef enum {
NR_RNTI_INT
,
NR_RNTI_TPC_PUSCH
,
NR_RNTI_TPC_PUCCH
,
NR_RNTI_TPC_SRS
NR_RNTI_TPC_SRS
,
NR_RNTI_MCS_C
,
}
nr_rnti_type_t
;
uint16_t
config_bandwidth
(
int
mu
,
int
nb_rb
,
int
nr_band
);
...
...
@@ -100,6 +101,13 @@ int get_nr_prach_info_from_index(uint8_t index,
uint8_t
*
N_t_slot
,
uint8_t
*
N_dur
);
uint8_t
get_pusch_mcs_table
(
long
*
mcs_Table
,
int
is_tp
,
int
dci_format
,
int
rnti_type
,
int
target_ss
,
bool
config_grant
);
uint8_t
compute_nr_root_seq
(
NR_RACH_ConfigCommon_t
*
rach_config
,
uint8_t
nb_preambles
,
uint8_t
unpaired
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
f69824c9
...
...
@@ -514,20 +514,15 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
}
else
UE_list
->
fiveG_connected
[
UE_id
]
=
true
;
if
(
get_softmodem_params
()
->
phy_test
)
{
if
(
UE_list
->
fiveG_connected
[
UE_id
])
{
// TbD once RACH is available, start ta_timer when UE is connected
if
(
ue_sched_ctl
->
ta_timer
)
ue_sched_ctl
->
ta_timer
--
;
if
(
ue_sched_ctl
->
ta_timer
==
0
)
{
gNB
->
ta_command
=
ue_sched_ctl
->
ta_updat
e
;
ue_sched_ctl
->
ta_apply
=
tru
e
;
/* if time is up, then set the timer to not send it for 5 frames
// regardless of the TA value */
ue_sched_ctl
->
ta_timer
=
100
;
/* reset ta_update */
ue_sched_ctl
->
ta_update
=
31
;
/* MAC CE flag indicating TA length */
gNB
->
ta_len
=
2
;
}
}
...
...
@@ -542,8 +537,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
ue_sched_ctl
->
current_harq_pid
=
slot
%
num_slots_per_tdd
;
nr_update_pucch_scheduling
(
module_idP
,
UE_id
,
frame
,
slot
,
num_slots_per_tdd
,
&
pucch_sched
);
nr_schedule_uss_dlsch_phytest
(
module_idP
,
frame
,
slot
,
&
UE_list
->
UE_sched_ctrl
[
UE_id
].
sched_pucch
[
pucch_sched
],
NULL
);
// resetting ta flag
gNB
->
ta_len
=
0
;
ue_sched_ctl
->
ta_apply
=
false
;
}
if
(
UE_list
->
fiveG_connected
[
UE_id
])
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
f69824c9
...
...
@@ -94,13 +94,13 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
// now TA is always send when ta_timer resets regardless of its value
// this is done to avoid issues with the timeAlignmentTimer which is
// supposed to monitor if the UE received TA or not */
if
(
gNB
->
ta_len
)
{
if
(
ue_sched_ctl
->
ta_apply
)
{
mac_pdu_ptr
->
R
=
0
;
mac_pdu_ptr
->
LCID
=
DL_SCH_LCID_TA_COMMAND
;
//last_size = 1;
mac_pdu_ptr
++
;
// TA MAC CE (1 octet)
timing_advance_cmd
=
gNB
->
ta_command
;
timing_advance_cmd
=
ue_sched_ctl
->
ta_update
;
AssertFatal
(
timing_advance_cmd
<
64
,
"timing_advance_cmd %d > 63
\n
"
,
timing_advance_cmd
);
((
NR_MAC_CE_TA
*
)
ce_ptr
)
->
TA_COMMAND
=
timing_advance_cmd
;
//(timing_advance_cmd+31)&0x3f;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
f69824c9
...
...
@@ -596,7 +596,7 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
LOG_D
(
MAC
,
"In nr_schedule_uss_dlsch_phytest frame %d slot %d
\n
"
,
frameP
,
slotP
);
int
post_padding
=
0
,
ta_len
=
0
,
header_length_total
=
0
,
sdu_length_total
=
0
,
num_sdus
=
0
;
int
post_padding
=
0
,
header_length_total
=
0
,
sdu_length_total
=
0
,
num_sdus
=
0
;
int
lcid
,
offset
,
i
,
header_length_last
,
TBS_bytes
=
0
;
int
UE_id
=
0
,
CC_id
=
0
;
...
...
@@ -615,12 +615,13 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
unsigned
char
sdu_lcids
[
NB_RB_MAX
]
=
{
0
};
uint16_t
sdu_lengths
[
NB_RB_MAX
]
=
{
0
};
uint16_t
rnti
=
UE_list
->
rnti
[
UE_id
];
NR_UE_sched_ctrl_t
*
ue_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
uint8_t
mac_sdus
[
MAX_NR_DLSCH_PAYLOAD_BYTES
];
LOG_D
(
MAC
,
"Scheduling UE specific search space DCI type 1
\n
"
);
ta_len
=
gNB_mac
->
ta_len
;
int
ta_len
=
(
ue_sched_ctl
->
ta_apply
)
?
2
:
0
;
TBS_bytes
=
configure_fapi_dl_pdu
(
module_idP
,
dl_req
,
...
...
@@ -862,6 +863,36 @@ void schedule_fapi_ul_pdu(int Mod_idP,
LOG_D
(
MAC
,
"Scheduling UE specific PUSCH
\n
"
);
//UL_tti_req = &nr_mac->UL_tti_req[CC_id];
int
dci_formats
[
2
];
int
rnti_types
[
2
];
NR_SearchSpace_t
*
ss
;
int
target_ss
=
NR_SearchSpace__searchSpaceType_PR_ue_Specific
;
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
!=
NULL
,
"searchPsacesToAddModList is null
\n
"
);
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
>
0
,
"searchPsacesToAddModList is empty
\n
"
);
int
found
=
0
;
for
(
int
i
=
0
;
i
<
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
;
i
++
)
{
ss
=
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
array
[
i
];
AssertFatal
(
ss
->
controlResourceSetId
!=
NULL
,
"ss->controlResourceSetId is null
\n
"
);
AssertFatal
(
ss
->
searchSpaceType
!=
NULL
,
"ss->searchSpaceType is null
\n
"
);
if
(
ss
->
searchSpaceType
->
present
==
target_ss
)
{
found
=
1
;
break
;
}
}
AssertFatal
(
found
==
1
,
"Couldn't find an adequate searchspace
\n
"
);
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
)
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_1
;
else
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_0
;
rnti_types
[
0
]
=
NR_RNTI_C
;
//Resource Allocation in time domain
int
startSymbolAndLength
=
0
;
int
StartSymbolIndex
,
NrOfSymbols
,
mapping_type
;
...
...
@@ -881,12 +912,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
pusch_pdu
->
bwp_start
=
NRRIV2PRBOFFSET
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
pusch_pdu
->
subcarrier_spacing
=
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
pusch_pdu
->
cyclic_prefix
=
0
;
//pusch information always include
//this informantion seems to be redundant. with hthe mcs_index and the modulation table, the mod_order and target_code_rate can be determined.
pusch_pdu
->
mcs_index
=
9
;
pusch_pdu
->
mcs_table
=
0
;
//0: notqam256 [TS38.214, table 5.1.3.1-1] - corresponds to nr_target_code_rate_table1 in PHY
pusch_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
)
;
pusch_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
)
;
if
(
pusch_Config
->
transformPrecoder
==
NULL
)
{
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
==
NULL
)
pusch_pdu
->
transform_precoding
=
1
;
...
...
@@ -900,6 +926,23 @@ void schedule_fapi_ul_pdu(int Mod_idP,
else
pusch_pdu
->
data_scrambling_id
=
*
scc
->
physCellId
;
pusch_pdu
->
mcs_index
=
9
;
if
(
pusch_pdu
->
transform_precoding
)
pusch_pdu
->
mcs_table
=
get_pusch_mcs_table
(
pusch_Config
->
mcs_Table
,
0
,
dci_formats
[
0
],
rnti_types
[
0
],
target_ss
,
false
);
else
pusch_pdu
->
mcs_table
=
get_pusch_mcs_table
(
pusch_Config
->
mcs_TableTransformPrecoder
,
1
,
dci_formats
[
0
],
rnti_types
[
0
],
target_ss
,
false
);
pusch_pdu
->
target_code_rate
=
nr_get_code_rate_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
);
pusch_pdu
->
qam_mod_order
=
nr_get_Qm_ul
(
pusch_pdu
->
mcs_index
,
pusch_pdu
->
mcs_table
);
if
(
pusch_Config
->
tp_pi2BPSK
!=
NULL
)
{
if
(((
pusch_pdu
->
mcs_table
==
3
)
&&
(
pusch_pdu
->
mcs_index
<
2
))
||
((
pusch_pdu
->
mcs_table
==
4
)
&&
(
pusch_pdu
->
mcs_index
<
6
)))
{
pusch_pdu
->
target_code_rate
=
pusch_pdu
->
target_code_rate
>>
1
;
pusch_pdu
->
qam_mod_order
=
pusch_pdu
->
qam_mod_order
<<
1
;
}
}
pusch_pdu
->
nrOfLayers
=
1
;
//Pusch Allocation in frequency domain [TS38.214, sec 6.1.2.2]
...
...
@@ -1053,35 +1096,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
&
ul_dci_request_pdu
->
pdcch_pdu
.
pdcch_pdu_rel15
;
UL_dci_req
->
numPdus
+=
1
;
int
dci_formats
[
2
];
int
rnti_types
[
2
];
NR_SearchSpace_t
*
ss
;
int
target_ss
=
NR_SearchSpace__searchSpaceType_PR_ue_Specific
;
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
!=
NULL
,
"searchPsacesToAddModList is null
\n
"
);
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
>
0
,
"searchPsacesToAddModList is empty
\n
"
);
int
found
=
0
;
for
(
int
i
=
0
;
i
<
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
count
;
i
++
)
{
ss
=
bwp
->
bwp_Dedicated
->
pdcch_Config
->
choice
.
setup
->
searchSpacesToAddModList
->
list
.
array
[
i
];
AssertFatal
(
ss
->
controlResourceSetId
!=
NULL
,
"ss->controlResourceSetId is null
\n
"
);
AssertFatal
(
ss
->
searchSpaceType
!=
NULL
,
"ss->searchSpaceType is null
\n
"
);
if
(
ss
->
searchSpaceType
->
present
==
target_ss
)
{
found
=
1
;
break
;
}
}
AssertFatal
(
found
==
1
,
"Couldn't find an adequate searchspace
\n
"
);
if
(
ss
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
)
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_1
;
else
dci_formats
[
0
]
=
NR_UL_DCI_FORMAT_0_0
;
rnti_types
[
0
]
=
NR_RNTI_C
;
LOG_D
(
MAC
,
"Configuring ULDCI/PDCCH in %d.%d
\n
"
,
frameP
,
slotP
);
int
ret
=
nr_configure_pdcch
(
nr_mac
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
f69824c9
...
...
@@ -1465,6 +1465,8 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP){
memset
((
void
*
)
&
UE_list
->
UE_sched_ctrl
[
UE_id
],
0
,
sizeof
(
NR_UE_sched_ctrl_t
));
UE_list
->
UE_sched_ctrl
[
UE_id
].
ta_timer
=
100
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ta_update
=
31
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_rssi
=
0
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
sched_pucch
=
(
NR_sched_pucch
*
)
malloc
(
num_slots_ul
*
sizeof
(
NR_sched_pucch
));
UE_list
->
UE_sched_ctrl
[
UE_id
].
sched_pusch
=
(
NR_sched_pusch
*
)
malloc
(
num_slots_ul
*
sizeof
(
NR_sched_pusch
));
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
f69824c9
...
...
@@ -339,6 +339,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
// if not missed detection (10dB threshold for now)
if
(
UE_scheduling_control
->
ul_rssi
<
(
100
+
rssi
))
{
UE_scheduling_control
->
tpc0
=
nr_get_tpc
(
target_snrx10
,
ul_cqi
,
30
);
if
(
timing_advance
!=
0xffff
)
UE_scheduling_control
->
ta_update
=
timing_advance
;
UE_scheduling_control
->
ul_rssi
=
rssi
;
LOG_D
(
MAC
,
"[UE %d] PUSCH TPC %d and TA %d
\n
"
,
UE_id
,
UE_scheduling_control
->
tpc0
,
UE_scheduling_control
->
ta_update
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
f69824c9
...
...
@@ -289,6 +289,7 @@ typedef struct {
NR_sched_pusch
*
sched_pusch
;
uint16_t
ta_timer
;
int16_t
ta_update
;
bool
ta_apply
;
uint8_t
tpc0
;
uint8_t
tpc1
;
uint16_t
ul_rssi
;
...
...
@@ -353,10 +354,6 @@ typedef struct gNB_MAC_INST_s {
int
pusch_target_snrx10
;
/// Pucch target SNR
int
pucch_target_snrx10
;
/// TA command
int
ta_command
;
/// MAC CE flag indicating TA length
int
ta_len
;
/// Common cell resources
NR_COMMON_channels_t
common_channels
[
NFAPI_CC_MAX
];
/// current PDU index (BCH,DLSCH)
...
...
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