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
789b8e71
Commit
789b8e71
authored
Oct 19, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/fixes-mac-sched-nfapi' into integration_2020_wk42
parents
ade34ec4
e516bec6
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
128 additions
and
202 deletions
+128
-202
nfapi/oai_integration/nfapi_vnf.c
nfapi/oai_integration/nfapi_vnf.c
+15
-1
nfapi/open-nFAPI/vnf/src/vnf_p7.c
nfapi/open-nFAPI/vnf/src/vnf_p7.c
+2
-2
openair2/LAYER2/MAC/main_ue.c
openair2/LAYER2/MAC/main_ue.c
+0
-11
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+107
-151
openair2/LAYER2/MAC/slicing/slicing.c
openair2/LAYER2/MAC/slicing/slicing.c
+4
-0
openair2/PHY_INTERFACE/IF_Module.h
openair2/PHY_INTERFACE/IF_Module.h
+0
-11
openair2/PHY_INTERFACE/phy_stub_UE.c
openair2/PHY_INTERFACE/phy_stub_UE.c
+0
-24
openair2/PHY_INTERFACE/phy_stub_UE.h
openair2/PHY_INTERFACE/phy_stub_UE.h
+0
-2
No files found.
nfapi/oai_integration/nfapi_vnf.c
View file @
789b8e71
...
...
@@ -348,7 +348,15 @@ int wake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf) {
old_sf
=
sf
;
old_sfn
=
sfn
;
if
(
old_sf
==
0
&&
old_sfn
%
100
==
0
)
LOG_W
(
PHY
,
"[eNB] sfn/sf:%d%d old_sfn/sf:%d%d proc[rx:%d%d]
\n
"
,
sfn
,
sf
,
old_sfn
,
old_sf
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
if
(
old_sf
==
0
&&
old_sfn
%
100
==
0
)
LOG_D
(
PHY
,
"[eNB] sfn/sf:%d%d old_sfn/sf:%d%d proc[rx:%d%d]
\n
"
,
sfn
,
sf
,
old_sfn
,
old_sf
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
}
++
L1_proc
->
instance_cnt
;
...
...
@@ -435,6 +443,7 @@ int phy_rach_indication(struct nfapi_vnf_p7_config *config, nfapi_rach_indicatio
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_rach_indication : num of rach reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
rach_ind
[
index
]
=
*
ind
;
...
...
@@ -499,6 +508,7 @@ int phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indicatio
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_harq_indication : num of harq reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
harq_ind
[
index
]
=
*
ind
;
...
...
@@ -538,6 +548,7 @@ int phy_crc_indication(struct nfapi_vnf_p7_config *config, nfapi_crc_indication_
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_crc_indication : num of crc reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
crc_ind
[
index
]
=
*
ind
;
...
...
@@ -603,6 +614,7 @@ int phy_rx_indication(struct nfapi_vnf_p7_config *config, nfapi_rx_indication_t
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_rx_indication : num of rx reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
rx_ind
[
index
]
=
*
ind
;
...
...
@@ -686,6 +698,7 @@ int phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_sr_indication : num of sr reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
sr_ind
[
index
]
=
*
ind
;
...
...
@@ -737,6 +750,7 @@ int phy_cqi_indication(struct nfapi_vnf_p7_config *config, nfapi_cqi_indication_
}
if
(
index
==
-
1
){
LOG_E
(
MAC
,
"phy_cqi_indication : num of cqi reach max
\n
"
);
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
return
0
;
}
UL_RCC_INFO
.
cqi_ind
[
index
]
=
*
ind
;
...
...
nfapi/open-nFAPI/vnf/src/vnf_p7.c
View file @
789b8e71
...
...
@@ -955,7 +955,7 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
struct
timespec
ts
;
clock_gettime
(
CLOCK_MONOTONIC
,
&
ts
);
NFAPI_TRACE
(
NFAPI_TRACE_
NOTE
,
"(%4d/%1d) %d.%d PNF to VNF phy_id:%2d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d(avg:%4d) offset(us):%8d filtered(us):%8d wrap[t1:%u t2:%u]
\n
"
,
NFAPI_TRACE
(
NFAPI_TRACE_
INFO
,
"(%4d/%1d) %d.%d PNF to VNF phy_id:%2d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d(avg:%4d) offset(us):%8d filtered(us):%8d wrap[t1:%u t2:%u]
\n
"
,
NFAPI_SFNSF2SFN
(
phy
->
sfn_sf
),
NFAPI_SFNSF2SF
(
phy
->
sfn_sf
),
ts
.
tv_sec
,
ts
.
tv_nsec
,
ind
.
header
.
phy_id
,
ind
.
t1
,
ind
.
t2
,
ind
.
t3
,
t4
,
tx_2_rx
,
pnf_proc_time
,
latency
,
phy
->
average_latency
,
phy
->
sf_offset
,
phy
->
sf_offset_filtered
,
...
...
@@ -1016,7 +1016,7 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
{
phy
->
adjustment
=
NFAPI_SFNSF2DEC
(
new_sfn_sf
)
-
NFAPI_SFNSF2DEC
(
curr_sfn_sf
);
NFAPI_TRACE
(
NFAPI_TRACE_
NOTE
,
"PNF to VNF phy_id:%d adjustment%d phy->previous_sf_offset_filtered:%d phy->previous_sf_offset_filtered:%d phy->sf_offset_trend:%d
\n
"
,
ind
.
header
.
phy_id
,
phy
->
adjustment
,
phy
->
previous_sf_offset_filtered
,
phy
->
previous_sf_offset_filtered
,
phy
->
sf_offset_trend
);
NFAPI_TRACE
(
NFAPI_TRACE_
INFO
,
"PNF to VNF phy_id:%d adjustment%d phy->previous_sf_offset_filtered:%d phy->previous_sf_offset_filtered:%d phy->sf_offset_trend:%d
\n
"
,
ind
.
header
.
phy_id
,
phy
->
adjustment
,
phy
->
previous_sf_offset_filtered
,
phy
->
previous_sf_offset_filtered
,
phy
->
sf_offset_trend
);
phy
->
previous_t1
=
0
;
phy
->
previous_t2
=
0
;
...
...
openair2/LAYER2/MAC/main_ue.c
View file @
789b8e71
...
...
@@ -44,7 +44,6 @@
#include "common/ran_context.h"
extern
FILL_UL_INFO_MUTEX_t
fill_ul_mutex
;
extern
void
openair_rrc_top_init_ue
(
int
eMBMS_active
,
char
*
uecap_xer
,
uint8_t
cba_group_active
,
uint8_t
HO_active
);
void
dl_phy_sync_success
(
module_id_t
module_idP
,
frame_t
frameP
,
unsigned
char
eNB_index
,
uint8_t
first_sync
)
{
//init as MR
...
...
@@ -90,16 +89,6 @@ mac_top_init_ue(int eMBMS_active, char *uecap_xer,
UE_mac_inst
=
NULL
;
}
// mutex below are used for multiple UE's L2 FAPI simulation.
if
(
NFAPI_MODE
==
NFAPI_UE_STUB_PNF
)
{
pthread_mutex_init
(
&
fill_ul_mutex
.
rx_mutex
,
NULL
);
pthread_mutex_init
(
&
fill_ul_mutex
.
crc_mutex
,
NULL
);
pthread_mutex_init
(
&
fill_ul_mutex
.
sr_mutex
,
NULL
);
pthread_mutex_init
(
&
fill_ul_mutex
.
harq_mutex
,
NULL
);
pthread_mutex_init
(
&
fill_ul_mutex
.
cqi_mutex
,
NULL
);
pthread_mutex_init
(
&
fill_ul_mutex
.
rach_mutex
,
NULL
);
}
LOG_I
(
MAC
,
"[MAIN] calling RRC
\n
"
);
openair_rrc_top_init_ue
(
eMBMS_active
,
uecap_xer
,
cba_group_active
,
HO_active
);
...
...
openair2/LAYER2/MAC/pre_processor.c
View file @
789b8e71
...
...
@@ -69,6 +69,70 @@ int get_rbg_size_last(module_id_t Mod_id, int CC_id) {
return
RBGsize
;
}
bool
try_allocate_harq_retransmission
(
module_id_t
Mod_id
,
int
CC_id
,
int
frame
,
int
subframe
,
int
UE_id
,
int
start_rbg
,
int
*
n_rbg_sched
,
uint8_t
*
rbgalloc_mask
)
{
const
int
N_RBG
=
to_rbg
(
RC
.
mac
[
Mod_id
]
->
common_channels
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
const
int
RBGsize
=
get_min_rb_unit
(
Mod_id
,
CC_id
);
const
int
RBGlastsize
=
get_rbg_size_last
(
Mod_id
,
CC_id
);
UE_info_t
*
UE_info
=
&
RC
.
mac
[
Mod_id
]
->
UE_info
;
// check whether there are HARQ retransmissions
const
COMMON_channels_t
*
cc
=
&
RC
.
mac
[
Mod_id
]
->
common_channels
[
CC_id
];
const
uint8_t
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame
,
subframe
);
UE_sched_ctrl_t
*
ue_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
// retransmission: allocate
const
int
nb_rb
=
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
];
if
(
nb_rb
==
0
)
{
return
false
;
}
int
nb_rbg
=
(
nb_rb
+
(
nb_rb
%
RBGsize
))
/
RBGsize
;
// needs more RBGs than we can allocate
if
(
nb_rbg
>
*
n_rbg_sched
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs more RBGs (%d) than we have (%d)
\n
"
,
UE_id
,
nb_rbg
,
*
n_rbg_sched
);
return
false
;
}
// ensure that the number of RBs can be contained by the RBGs (!), i.e.
// if we allocate the last RBG this one should have the full RBGsize
if
((
nb_rb
%
RBGsize
)
==
0
&&
nb_rbg
==
*
n_rbg_sched
&&
rbgalloc_mask
[
N_RBG
-
1
]
&&
RBGlastsize
!=
RBGsize
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs %d RBs, but the last RBG %d is too small (%d, normal %d)
\n
"
,
UE_id
,
nb_rb
,
N_RBG
-
1
,
RBGlastsize
,
RBGsize
);
return
false
;
}
const
uint8_t
cqi
=
ue_ctrl
->
dl_cqi
[
CC_id
];
const
int
idx
=
CCE_try_allocate_dlsch
(
Mod_id
,
CC_id
,
subframe
,
UE_id
,
cqi
);
if
(
idx
<
0
)
{
// cannot allocate CCE
LOG_D
(
MAC
,
"cannot allocate UE %d: no CCE can be allocated
\n
"
,
UE_id
);
return
false
;
}
ue_ctrl
->
pre_dci_dl_pdu_idx
=
idx
;
// retransmissions: directly allocate
*
n_rbg_sched
-=
nb_rbg
;
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]
+=
nb_rb
;
for
(;
nb_rbg
>
0
;
start_rbg
++
)
{
if
(
!
rbgalloc_mask
[
start_rbg
])
continue
;
ue_ctrl
->
rballoc_sub_UE
[
CC_id
][
start_rbg
]
=
1
;
rbgalloc_mask
[
start_rbg
]
=
0
;
nb_rbg
--
;
}
LOG_D
(
MAC
,
"%4d.%d n_rbg_sched %d after retransmission reservation for UE %d "
"retx nb_rb %d pre_nb_available_rbs %d
\n
"
,
frame
,
subframe
,
*
n_rbg_sched
,
UE_id
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
],
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]);
return
true
;
}
void
*
rr_dl_setup
(
void
)
{
void
*
data
=
malloc
(
sizeof
(
int
));
*
(
int
*
)
data
=
0
;
...
...
@@ -115,64 +179,25 @@ int rr_dl_run(module_id_t Mod_id,
const
uint8_t
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame
,
subframe
);
UE_sched_ctrl_t
*
ue_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
const
uint8_t
round
=
ue_ctrl
->
round
[
CC_id
][
harq_pid
];
if
(
round
!=
8
)
{
// retransmission: allocate
const
int
nb_rb
=
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
];
if
(
nb_rb
==
0
)
goto
skip_ue
;
int
nb_rbg
=
(
nb_rb
+
(
nb_rb
%
RBGsize
))
/
RBGsize
;
// needs more RBGs than we can allocate
if
(
nb_rbg
>
n_rbg_sched
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs more RBGs (%d) than we have (%d)
\n
"
,
UE_id
,
nb_rbg
,
n_rbg_sched
);
goto
skip_ue
;
}
// ensure that the number of RBs can be contained by the RBGs (!), i.e.
// if we allocate the last RBG this one should have the full RBGsize
if
((
nb_rb
%
RBGsize
)
==
0
&&
nb_rbg
==
n_rbg_sched
&&
rbgalloc_mask
[
N_RBG
-
1
]
&&
RBGlastsize
!=
RBGsize
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs %d RBs, but the last RBG %d is too small (%d, normal %d)
\n
"
,
UE_id
,
nb_rb
,
N_RBG
-
1
,
RBGlastsize
,
RBGsize
);
goto
skip_ue
;
}
const
uint8_t
cqi
=
ue_ctrl
->
dl_cqi
[
CC_id
];
const
int
idx
=
CCE_try_allocate_dlsch
(
Mod_id
,
CC_id
,
subframe
,
UE_id
,
cqi
);
if
(
idx
<
0
)
goto
skip_ue
;
// cannot allocate CCE
ue_ctrl
->
pre_dci_dl_pdu_idx
=
idx
;
// retransmissions: directly allocate
n_rbg_sched
-=
nb_rbg
;
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]
+=
nb_rb
;
for
(;
nb_rbg
>
0
;
rbg
++
)
{
if
(
!
rbgalloc_mask
[
rbg
])
continue
;
ue_ctrl
->
rballoc_sub_UE
[
CC_id
][
rbg
]
=
1
;
rbgalloc_mask
[
rbg
]
=
0
;
nb_rbg
--
;
}
LOG_D
(
MAC
,
"%4d.%d n_rbg_sched %d after retransmission reservation for UE %d "
"round %d retx nb_rb %d pre_nb_available_rbs %d
\n
"
,
frame
,
subframe
,
n_rbg_sched
,
UE_id
,
round
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
],
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]);
if
(
round
!=
8
)
{
bool
r
=
try_allocate_harq_retransmission
(
Mod_id
,
CC_id
,
frame
,
subframe
,
UE_id
,
rbg
,
&
n_rbg_sched
,
rbgalloc_mask
);
if
(
r
)
{
/* if there are no more RBG to give, return */
if
(
n_rbg_sched
<=
0
)
return
0
;
max_num_ue
--
;
/* if there are no UEs that can be allocated anymore, return */
if
(
max_num_ue
==
0
)
return
n_rbg_sched
;
for
(;
!
rbgalloc_mask
[
rbg
];
rbg
++
)
/* fast-forward */
;
}
}
else
{
if
(
UE_info
->
UE_template
[
CC_id
][
UE_id
].
dl_buffer_total
>
0
)
{
*
cur_UE
=
UE_id
;
cur_UE
=
&
UE_sched
.
next
[
UE_id
];
}
}
skip_ue:
UE_id
=
next_ue_list_looped
(
UE_list
,
UE_id
);
}
while
(
UE_id
!=
*
start_ue
);
*
cur_UE
=
-
1
;
// mark end
...
...
@@ -187,11 +212,12 @@ skip_ue:
cur_UE
=
&
UE_sched
.
head
;
while
(
*
cur_UE
>=
0
&&
max_num_ue
>
0
)
{
const
int
UE_id
=
*
cur_UE
;
cur_UE
=
&
UE_sched
.
next
[
UE_id
];
// go to next
const
uint8_t
cqi
=
UE_info
->
UE_sched_ctrl
[
UE_id
].
dl_cqi
[
CC_id
];
const
int
idx
=
CCE_try_allocate_dlsch
(
Mod_id
,
CC_id
,
subframe
,
UE_id
,
cqi
);
if
(
idx
<
0
)
{
LOG_D
(
MAC
,
"cannot allocate CCE for UE %d, skipping
\n
"
,
UE_id
);
// SKIP this UE in the list by marking the next as the current
*
cur_UE
=
UE_sched
.
next
[
UE_id
];
continue
;
}
UE_info
->
UE_sched_ctrl
[
UE_id
].
pre_dci_dl_pdu_idx
=
idx
;
...
...
@@ -200,6 +226,7 @@ skip_ue:
const
uint32_t
B
=
UE_info
->
UE_template
[
CC_id
][
UE_id
].
dl_buffer_total
;
rb_required
[
UE_id
]
=
find_nb_rb_DL
(
mcs
,
B
,
n_rbg_sched
*
RBGsize
,
RBGsize
);
max_num_ue
--
;
cur_UE
=
&
UE_sched
.
next
[
UE_id
];
// go to next
}
*
cur_UE
=
-
1
;
// not all UEs might be allocated, mark end
...
...
@@ -284,56 +311,19 @@ int pf_wbcqi_dl_run(module_id_t Mod_id,
const
uint8_t
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame
,
subframe
);
UE_sched_ctrl_t
*
ue_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
const
uint8_t
round
=
ue_ctrl
->
round
[
CC_id
][
harq_pid
];
if
(
round
!=
8
)
{
// retransmission: allocate
const
int
nb_rb
=
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
];
if
(
nb_rb
==
0
)
continue
;
int
nb_rbg
=
(
nb_rb
+
(
nb_rb
%
RBGsize
))
/
RBGsize
;
// needs more RBGs than we can allocate
if
(
nb_rbg
>
n_rbg_sched
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs more RBGs (%d) than we have (%d)
\n
"
,
UE_id
,
nb_rbg
,
n_rbg_sched
);
continue
;
}
// ensure that the number of RBs can be contained by the RBGs (!), i.e.
// if we allocate the last RBG this one should have the full RBGsize
if
((
nb_rb
%
RBGsize
)
==
0
&&
nb_rbg
==
n_rbg_sched
&&
rbgalloc_mask
[
N_RBG
-
1
]
&&
RBGlastsize
!=
RBGsize
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs %d RBs, but the last RBG %d is too small (%d, normal %d)
\n
"
,
UE_id
,
nb_rb
,
N_RBG
-
1
,
RBGlastsize
,
RBGsize
);
continue
;
}
const
uint8_t
cqi
=
ue_ctrl
->
dl_cqi
[
CC_id
];
const
int
idx
=
CCE_try_allocate_dlsch
(
Mod_id
,
CC_id
,
subframe
,
UE_id
,
cqi
);
if
(
idx
<
0
)
continue
;
// cannot allocate CCE
ue_ctrl
->
pre_dci_dl_pdu_idx
=
idx
;
// retransmissions: directly allocate
n_rbg_sched
-=
nb_rbg
;
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]
+=
nb_rb
;
for
(;
nb_rbg
>
0
;
rbg
++
)
{
if
(
!
rbgalloc_mask
[
rbg
])
continue
;
ue_ctrl
->
rballoc_sub_UE
[
CC_id
][
rbg
]
=
1
;
rbgalloc_mask
[
rbg
]
=
0
;
nb_rbg
--
;
}
LOG_D
(
MAC
,
"%4d.%d n_rbg_sched %d after retransmission reservation for UE %d "
"round %d retx nb_rb %d pre_nb_available_rbs %d
\n
"
,
frame
,
subframe
,
n_rbg_sched
,
UE_id
,
round
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
],
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]);
if
(
round
!=
8
)
{
bool
r
=
try_allocate_harq_retransmission
(
Mod_id
,
CC_id
,
frame
,
subframe
,
UE_id
,
rbg
,
&
n_rbg_sched
,
rbgalloc_mask
);
if
(
r
)
{
/* if there are no more RBG to give, return */
if
(
n_rbg_sched
<=
0
)
return
0
;
max_num_ue
--
;
/* if there are no UEs that can be allocated anymore, return */
if
(
max_num_ue
==
0
)
return
n_rbg_sched
;
for
(;
!
rbgalloc_mask
[
rbg
];
rbg
++
)
/* fast-forward */
;
}
}
else
{
if
(
UE_info
->
UE_template
[
CC_id
][
UE_id
].
dl_buffer_total
==
0
)
continue
;
...
...
@@ -436,56 +426,19 @@ int mt_wbcqi_dl_run(module_id_t Mod_id,
const
uint8_t
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frame
,
subframe
);
UE_sched_ctrl_t
*
ue_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
const
uint8_t
round
=
ue_ctrl
->
round
[
CC_id
][
harq_pid
];
if
(
round
!=
8
)
{
// retransmission: allocate
const
int
nb_rb
=
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
];
if
(
nb_rb
==
0
)
continue
;
int
nb_rbg
=
(
nb_rb
+
(
nb_rb
%
RBGsize
))
/
RBGsize
;
// needs more RBGs than we can allocate
if
(
nb_rbg
>
n_rbg_sched
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs more RBGs (%d) than we have (%d)
\n
"
,
UE_id
,
nb_rbg
,
n_rbg_sched
);
continue
;
}
// ensure that the number of RBs can be contained by the RBGs (!), i.e.
// if we allocate the last RBG this one should have the full RBGsize
if
((
nb_rb
%
RBGsize
)
==
0
&&
nb_rbg
==
n_rbg_sched
&&
rbgalloc_mask
[
N_RBG
-
1
]
&&
RBGlastsize
!=
RBGsize
)
{
LOG_D
(
MAC
,
"retransmission of UE %d needs %d RBs, but the last RBG %d is too small (%d, normal %d)
\n
"
,
UE_id
,
nb_rb
,
N_RBG
-
1
,
RBGlastsize
,
RBGsize
);
continue
;
}
const
uint8_t
cqi
=
ue_ctrl
->
dl_cqi
[
CC_id
];
const
int
idx
=
CCE_try_allocate_dlsch
(
Mod_id
,
CC_id
,
subframe
,
UE_id
,
cqi
);
if
(
idx
<
0
)
continue
;
// cannot allocate CCE
ue_ctrl
->
pre_dci_dl_pdu_idx
=
idx
;
// retransmissions: directly allocate
n_rbg_sched
-=
nb_rbg
;
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]
+=
nb_rb
;
for
(;
nb_rbg
>
0
;
rbg
++
)
{
if
(
!
rbgalloc_mask
[
rbg
])
continue
;
ue_ctrl
->
rballoc_sub_UE
[
CC_id
][
rbg
]
=
1
;
rbgalloc_mask
[
rbg
]
=
0
;
nb_rbg
--
;
}
LOG_D
(
MAC
,
"%4d.%d n_rbg_sched %d after retransmission reservation for UE %d "
"round %d retx nb_rb %d pre_nb_available_rbs %d
\n
"
,
frame
,
subframe
,
n_rbg_sched
,
UE_id
,
round
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
nb_rb
[
harq_pid
],
ue_ctrl
->
pre_nb_available_rbs
[
CC_id
]);
if
(
round
!=
8
)
{
bool
r
=
try_allocate_harq_retransmission
(
Mod_id
,
CC_id
,
frame
,
subframe
,
UE_id
,
rbg
,
&
n_rbg_sched
,
rbgalloc_mask
);
if
(
r
)
{
/* if there are no more RBG to give, return */
if
(
n_rbg_sched
<=
0
)
return
0
;
max_num_ue
--
;
/* if there are no UEs that can be allocated anymore, return */
if
(
max_num_ue
==
0
)
return
n_rbg_sched
;
for
(;
!
rbgalloc_mask
[
rbg
];
rbg
++
)
/* fast-forward */
;
}
}
else
{
if
(
UE_info
->
UE_template
[
CC_id
][
UE_id
].
dl_buffer_total
==
0
)
continue
;
...
...
@@ -942,7 +895,10 @@ int rr_ul_run(module_id_t Mod_id,
&
tx_power
);
UE_template
->
pre_assigned_mcs_ul
=
mcs
;
rb_idx_required
[
UE_id
]
=
rb_table_index
;
/* rb_idx_given >= 22: apparently the PHY cannot support more than 48
* RBs in the uplink. Hence, we limit every UE to 48 RBs, which is at
* index 22 */
rb_idx_required
[
UE_id
]
=
min
(
22
,
rb_table_index
);
//UE_template->pre_allocated_nb_rb_ul = rb_table[rb_table_index];
/* only print log when PHR changed */
static
int
phr
=
0
;
...
...
openair2/LAYER2/MAC/slicing/slicing.c
View file @
789b8e71
...
...
@@ -336,6 +336,8 @@ void static_dl(module_id_t mod_id,
rbgalloc_slice_mask
[
rbg
]
=
rbgalloc_mask
[
rbg
];
n_rbg_sched
+=
rbgalloc_mask
[
rbg
];
}
if
(
n_rbg_sched
==
0
)
/* no free RBGs, e.g., taken by RA */
continue
;
s
->
s
[
i
]
->
dl_algo
.
run
(
mod_id
,
CC_id
,
...
...
@@ -445,6 +447,8 @@ void static_ul(module_id_t mod_id,
}
if
(
!
last_rb_blocked
)
rbs
[
n_contig
-
1
].
length
=
p
->
posHigh
-
rbs
[
n_contig
-
1
].
start
+
1
;
if
(
n_contig
==
1
&&
rbs
[
0
].
length
==
0
)
/* no RBs, e.g., taken by RA */
continue
;
s
->
s
[
i
]
->
ul_algo
.
run
(
mod_id
,
CC_id
,
...
...
openair2/PHY_INTERFACE/IF_Module.h
View file @
789b8e71
...
...
@@ -203,17 +203,6 @@ typedef struct IF_Module_s{
pthread_mutex_t
if_mutex
;
}
IF_Module_t
;
// These mutex is used for multiple UEs L2 FAPI simulator.
// Each UEs set these value in UL and UL_INFO is shared in all UE's thread.
typedef
struct
{
pthread_mutex_t
rx_mutex
;
pthread_mutex_t
crc_mutex
;
pthread_mutex_t
sr_mutex
;
pthread_mutex_t
harq_mutex
;
pthread_mutex_t
cqi_mutex
;
pthread_mutex_t
rach_mutex
;
}
FILL_UL_INFO_MUTEX_t
;
/*Initial */
IF_Module_t
*
IF_Module_init
(
int
Mod_id
);
void
IF_Module_kill
(
int
Mod_id
);
...
...
openair2/PHY_INTERFACE/phy_stub_UE.c
View file @
789b8e71
...
...
@@ -64,8 +64,6 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,
nfapi_rx_indication_pdu_t
*
pdu
;
int
timing_advance_update
;
pthread_mutex_lock
(
&
fill_ul_mutex
.
rx_mutex
);
UL_INFO
->
rx_ind
.
sfn_sf
=
frame
<<
4
|
subframe
;
UL_INFO
->
rx_ind
.
rx_indication_body
.
tl
.
tag
=
NFAPI_RX_INDICATION_BODY_TAG
;
UL_INFO
->
rx_ind
.
vendor_extension
=
ul_config_req
->
vendor_extension
;
...
...
@@ -101,7 +99,6 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,
UL_INFO
->
rx_ind
.
rx_indication_body
.
number_of_pdus
++
;
UL_INFO
->
rx_ind
.
sfn_sf
=
frame
<<
4
|
subframe
;
pthread_mutex_unlock
(
&
fill_ul_mutex
.
rx_mutex
);
}
void
fill_sr_indication_UE_MAC
(
int
Mod_id
,
...
...
@@ -109,8 +106,6 @@ void fill_sr_indication_UE_MAC(int Mod_id,
int
subframe
,
UL_IND_t
*
UL_INFO
,
uint16_t
rnti
)
{
pthread_mutex_lock
(
&
fill_ul_mutex
.
sr_mutex
);
nfapi_sr_indication_t
*
sr_ind
=
&
UL_INFO
->
sr_ind
;
nfapi_sr_indication_body_t
*
sr_ind_body
=
&
sr_ind
->
sr_indication_body
;
nfapi_sr_indication_pdu_t
*
pdu
=
&
sr_ind_body
->
sr_pdu_list
[
sr_ind_body
->
number_of_srs
];
...
...
@@ -139,7 +134,6 @@ void fill_sr_indication_UE_MAC(int Mod_id,
// UL_INFO->rx_ind.rx_indication_body.number_of_pdus++;
sr_ind_body
->
number_of_srs
++
;
pthread_mutex_unlock
(
&
fill_ul_mutex
.
sr_mutex
);
}
void
fill_crc_indication_UE_MAC
(
int
Mod_id
,
...
...
@@ -149,8 +143,6 @@ void fill_crc_indication_UE_MAC(int Mod_id,
uint8_t
crc_flag
,
int
index
,
uint16_t
rnti
)
{
pthread_mutex_lock
(
&
fill_ul_mutex
.
crc_mutex
);
nfapi_crc_indication_pdu_t
*
pdu
=
&
UL_INFO
->
crc_ind
.
crc_indication_body
.
crc_pdu_list
[
UL_INFO
->
crc_ind
.
crc_indication_body
.
number_of_crcs
];
...
...
@@ -174,8 +166,6 @@ void fill_crc_indication_UE_MAC(int Mod_id,
__FUNCTION__
,
pdu
->
rx_ue_information
.
rnti
,
UL_INFO
->
crc_ind
.
crc_indication_body
.
number_of_crcs
);
pthread_mutex_unlock
(
&
fill_ul_mutex
.
crc_mutex
);
}
void
fill_rach_indication_UE_MAC
(
int
Mod_id
,
...
...
@@ -184,10 +174,6 @@ void fill_rach_indication_UE_MAC(int Mod_id,
UL_IND_t
*
UL_INFO
,
uint8_t
ra_PreambleIndex
,
uint16_t
ra_RNTI
)
{
LOG_D
(
MAC
,
"fill_rach_indication_UE_MAC 1
\n
"
);
pthread_mutex_lock
(
&
fill_ul_mutex
.
rach_mutex
);
UL_INFO
->
rach_ind
.
rach_indication_body
.
number_of_preambles
=
1
;
UL_INFO
->
rach_ind
.
header
.
message_id
=
NFAPI_RACH_INDICATION
;
...
...
@@ -232,8 +218,6 @@ void fill_rach_indication_UE_MAC(int Mod_id,
// should call it when we merge with that branch.
oai_nfapi_rach_ind
(
&
UL_INFO
->
rach_ind
);
free
(
UL_INFO
->
rach_ind
.
rach_indication_body
.
preamble_list
);
pthread_mutex_unlock
(
&
fill_ul_mutex
.
rach_mutex
);
}
void
fill_ulsch_cqi_indication_UE_MAC
(
int
Mod_id
,
...
...
@@ -241,7 +225,6 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id,
uint8_t
subframe
,
UL_IND_t
*
UL_INFO
,
uint16_t
rnti
)
{
pthread_mutex_lock
(
&
fill_ul_mutex
.
cqi_mutex
);
nfapi_cqi_indication_pdu_t
*
pdu
=
&
UL_INFO
->
cqi_ind
.
cqi_indication_body
.
cqi_pdu_list
[
UL_INFO
->
cqi_ind
.
cqi_indication_body
.
number_of_cqis
];
...
...
@@ -275,7 +258,6 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id,
raw_pdu
->
pdu
[
0
]
=
cqi
<<
4
;
UL_INFO
->
cqi_ind
.
cqi_indication_body
.
number_of_cqis
++
;
pthread_mutex_unlock
(
&
fill_ul_mutex
.
cqi_mutex
);
}
void
fill_ulsch_harq_indication_UE_MAC
(
...
...
@@ -285,8 +267,6 @@ void fill_ulsch_harq_indication_UE_MAC(
UL_IND_t
*
UL_INFO
,
nfapi_ul_config_ulsch_harq_information
*
harq_information
,
uint16_t
rnti
)
{
pthread_mutex_lock
(
&
fill_ul_mutex
.
harq_mutex
);
nfapi_harq_indication_pdu_t
*
pdu
=
&
UL_INFO
->
harq_ind
.
harq_indication_body
.
harq_pdu_list
[
UL_INFO
->
harq_ind
.
harq_indication_body
.
number_of_harqs
];
...
...
@@ -318,7 +298,6 @@ void fill_ulsch_harq_indication_UE_MAC(
}
UL_INFO
->
harq_ind
.
harq_indication_body
.
number_of_harqs
++
;
pthread_mutex_unlock
(
&
fill_ul_mutex
.
harq_mutex
);
}
void
fill_uci_harq_indication_UE_MAC
(
int
Mod_id
,
...
...
@@ -327,8 +306,6 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id,
UL_IND_t
*
UL_INFO
,
nfapi_ul_config_harq_information
*
harq_information
,
uint16_t
rnti
)
{
pthread_mutex_lock
(
&
fill_ul_mutex
.
harq_mutex
);
nfapi_harq_indication_t
*
ind
=
&
UL_INFO
->
harq_ind
;
nfapi_harq_indication_body_t
*
body
=
&
ind
->
harq_indication_body
;
nfapi_harq_indication_pdu_t
*
pdu
=
...
...
@@ -410,7 +387,6 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id,
LOG_D
(
PHY
,
"Incremented eNB->UL_INFO.harq_ind.number_of_harqs:%d
\n
"
,
UL_INFO
->
harq_ind
.
harq_indication_body
.
number_of_harqs
);
pthread_mutex_unlock
(
&
fill_ul_mutex
.
harq_mutex
);
}
void
handle_nfapi_ul_pdu_UE_MAC
(
module_id_t
Mod_id
,
...
...
openair2/PHY_INTERFACE/phy_stub_UE.h
View file @
789b8e71
...
...
@@ -17,8 +17,6 @@
//#include "openair1/PHY/defs.h"
//#include "openair1/PHY/LTE_TRANSPORT/defs.h"
// this mutex is used to set multiple UE's UL value in L2 FAPI simulator.
FILL_UL_INFO_MUTEX_t
fill_ul_mutex
;
//below 2 difinitions move to phy_stub_UE.c to add initialization when difinition.
extern
UL_IND_t
*
UL_INFO
;
extern
nfapi_tx_request_pdu_t
*
tx_request_pdu_list
;
...
...
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