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
ZhouShuya
OpenXG-RAN
Commits
410da556
Commit
410da556
authored
Nov 08, 2018
by
Nick Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix resource allocation issue at MAC
parent
17fa23d5
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
53 additions
and
30 deletions
+53
-30
openair1/PHY/LTE_TRANSPORT/dci_tools_NB_IoT.c
openair1/PHY/LTE_TRANSPORT/dci_tools_NB_IoT.c
+11
-4
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
+4
-4
openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c
openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c
+5
-3
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
+15
-8
openair2/LAYER2/MAC/output_handler_NB_IoT.c
openair2/LAYER2/MAC/output_handler_NB_IoT.c
+4
-3
openair2/LAYER2/MAC/schedule_tool_NB_IoT.c
openair2/LAYER2/MAC/schedule_tool_NB_IoT.c
+8
-4
openair2/PHY_INTERFACE/IF_Module_L2_primitives_NB_IoT.c
openair2/PHY_INTERFACE/IF_Module_L2_primitives_NB_IoT.c
+6
-4
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools_NB_IoT.c
View file @
410da556
...
@@ -54,7 +54,7 @@
...
@@ -54,7 +54,7 @@
void
add_dci_NB_IoT
(
DCI_PDU_NB_IoT
*
DCI_pdu
,
void
*
pdu
,
rnti_t
rnti
,
unsigned
char
dci_size_bytes
,
unsigned
char
aggregation
,
unsigned
char
dci_size_bits
,
unsigned
char
dci_fmt
,
uint8_t
npdcch_start_symbol
)
void
add_dci_NB_IoT
(
DCI_PDU_NB_IoT
*
DCI_pdu
,
void
*
pdu
,
rnti_t
rnti
,
unsigned
char
dci_size_bytes
,
unsigned
char
aggregation
,
unsigned
char
dci_size_bits
,
unsigned
char
dci_fmt
,
uint8_t
npdcch_start_symbol
)
{
{
//put the pdu
//put the pdu
memcpy
(
&
DCI_pdu
->
dci_alloc
[
DCI_pdu
->
Num_dci
].
dci_pdu
[
0
],
pdu
,
dci_size_bytes
);
memcpy
(
&
DCI_pdu
->
dci_alloc
[
0
].
dci_pdu
[
0
],
pdu
,
dci_size_bytes
);
//configure the dci alloc
//configure the dci alloc
DCI_pdu
->
dci_alloc
[
DCI_pdu
->
Num_dci
].
dci_length
=
dci_size_bits
;
DCI_pdu
->
dci_alloc
[
DCI_pdu
->
Num_dci
].
dci_length
=
dci_size_bits
;
DCI_pdu
->
dci_alloc
[
DCI_pdu
->
Num_dci
].
L
=
aggregation
;
DCI_pdu
->
dci_alloc
[
DCI_pdu
->
Num_dci
].
L
=
aggregation
;
...
@@ -159,7 +159,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -159,7 +159,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
// NB_IoT_eNB_NPDCCH_t *ndlcch = ;
// NB_IoT_eNB_NPDCCH_t *ndlcch = ;
void
*
DLSCH_DCI_NB_IoT
=
NULL
;
void
*
DLSCH_DCI_NB_IoT
=
NULL
;
eNB
->
DCI_pdu
=
(
DCI_PDU_NB_IoT
*
)
malloc
(
sizeof
(
DCI_PDU_NB_IoT
));
//
eNB->DCI_pdu = (DCI_PDU_NB_IoT*) malloc(sizeof(DCI_PDU_NB_IoT));
//N1 parameters
//N1 parameters
uint8_t
ncce_index
=
0
;
uint8_t
ncce_index
=
0
;
...
@@ -213,6 +213,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -213,6 +213,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
HARQackRes
=
DCI_Content
->
DCIN1_RAR
.
HARQackRes
;
HARQackRes
=
DCI_Content
->
DCIN1_RAR
.
HARQackRes
;
DCIRep
=
DCI_Content
->
DCIN1_RAR
.
DCIRep
;
DCIRep
=
DCI_Content
->
DCIN1_RAR
.
DCIRep
;
DLSCH_DCI_NB_IoT
=
(
DCIN1_RAR_t
*
)
malloc
(
sizeof
(
DCIN1_RAR_t
));
//DCI pdu content
//DCI pdu content
((
DCIN1_RAR_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN1_RAR_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN1_RAR_t
*
)
DLSCH_DCI_NB_IoT
)
->
orderIndicator
=
orderIndicator
;
((
DCIN1_RAR_t
*
)
DLSCH_DCI_NB_IoT
)
->
orderIndicator
=
orderIndicator
;
...
@@ -266,6 +268,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -266,6 +268,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
//ndlsch-> sqrt_rho_a?? set in dlsch_modulation
//ndlsch-> sqrt_rho_a?? set in dlsch_modulation
//ndlsch-> sqrt_rho_b??? set in dlsch_modulation
//ndlsch-> sqrt_rho_b??? set in dlsch_modulation
LOG_D
(
PHY
,
"DCI packing for N1RAR done
\n
"
);
//set in new_eNB_dlsch (initialization)
//set in new_eNB_dlsch (initialization)
/*
/*
* Mlimit
* Mlimit
...
@@ -288,7 +292,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -288,7 +292,8 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
ndi
=
DCI_Content
->
DCIN1
.
ndi
;
ndi
=
DCI_Content
->
DCIN1
.
ndi
;
HARQackRes
=
DCI_Content
->
DCIN1
.
HARQackRes
;
HARQackRes
=
DCI_Content
->
DCIN1
.
HARQackRes
;
DCIRep
=
DCI_Content
->
DCIN1
.
DCIRep
;
DCIRep
=
DCI_Content
->
DCIN1
.
DCIRep
;
DLSCH_DCI_NB_IoT
=
(
DCIN1_t
*
)
malloc
(
sizeof
(
DCIN1_t
));
/*Packed DCI here*/
/*Packed DCI here*/
((
DCIN1_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN1_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN1_t
*
)
DLSCH_DCI_NB_IoT
)
->
orderIndicator
=
orderIndicator
;
((
DCIN1_t
*
)
DLSCH_DCI_NB_IoT
)
->
orderIndicator
=
orderIndicator
;
...
@@ -339,6 +344,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -339,6 +344,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
directIndInf
=
DCI_Content
->
DCIN2_Ind
.
directIndInf
;
directIndInf
=
DCI_Content
->
DCIN2_Ind
.
directIndInf
;
resInfoBits
=
DCI_Content
->
DCIN2_Ind
.
resInfoBits
;
resInfoBits
=
DCI_Content
->
DCIN2_Ind
.
resInfoBits
;
DLSCH_DCI_NB_IoT
=
(
DCIN2_Ind_t
*
)
malloc
(
sizeof
(
DCIN2_Ind_t
));
/*Packed DCI here*/
/*Packed DCI here*/
((
DCIN2_Ind_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN2_Ind_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN2_Ind_t
*
)
DLSCH_DCI_NB_IoT
)
->
directIndInf
=
directIndInf
;
((
DCIN2_Ind_t
*
)
DLSCH_DCI_NB_IoT
)
->
directIndInf
=
directIndInf
;
...
@@ -359,6 +365,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -359,6 +365,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
RepNum
=
DCI_Content
->
DCIN2_Pag
.
RepNum
;
RepNum
=
DCI_Content
->
DCIN2_Pag
.
RepNum
;
DCIRep
=
DCI_Content
->
DCIN2_Pag
.
DCIRep
;
DCIRep
=
DCI_Content
->
DCIN2_Pag
.
DCIRep
;
DLSCH_DCI_NB_IoT
=
(
DCIN2_Pag_t
*
)
malloc
(
sizeof
(
DCIN2_Pag_t
));
/*Packed DCI here*/
/*Packed DCI here*/
((
DCIN2_Pag_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN2_Pag_t
*
)
DLSCH_DCI_NB_IoT
)
->
type
=
type
;
((
DCIN2_Pag_t
*
)
DLSCH_DCI_NB_IoT
)
->
ResAssign
=
ResAssign
;
((
DCIN2_Pag_t
*
)
DLSCH_DCI_NB_IoT
)
->
ResAssign
=
ResAssign
;
...
@@ -381,7 +388,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
...
@@ -381,7 +388,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
// compute DL power control parameters
// compute DL power control parameters
free
(
DLSCH_DCI_NB_IoT
);
return
(
0
);
return
(
0
);
}
}
...
...
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
View file @
410da556
...
@@ -188,13 +188,14 @@ void handle_nfapi_dlsch_pdu_NB_IoT(PHY_VARS_eNB *eNB,
...
@@ -188,13 +188,14 @@ void handle_nfapi_dlsch_pdu_NB_IoT(PHY_VARS_eNB *eNB,
//Independently if we have the PDU or not (first transmission or repetition) the process is activated for triggering the ndlsch_procedure
//Independently if we have the PDU or not (first transmission or repetition) the process is activated for triggering the ndlsch_procedure
//LOG_I(PHY,"ACTIVE_NB_IoT\n");
//LOG_I(PHY,"ACTIVE_NB_IoT\n");
ndlsch_harq23
->
status
=
ACTIVE_NB_IoT
;
ndlsch_harq23
->
status
=
ACTIVE_NB_IoT
;
LOG_D
(
PHY
,
"A NB-handle_nfapi_dlsch_pdu_NB_IoT SIB23
\n
"
);
//
LOG_D(PHY,"A NB-handle_nfapi_dlsch_pdu_NB_IoT SIB23\n");
}
}
//ue specific data or RAR (we already have received the DCI for this)
//ue specific data or RAR (we already have received the DCI for this)
else
if
(
rel13
->
rnti
!=
65535
&&
rel13
->
rnti_type
==
1
)
else
if
(
rel13
->
rnti
!=
65535
&&
rel13
->
rnti_type
==
1
)
{
{
printf
(
"rel13->rnti: %d, eNB->ndlsch_RAR->rnti: %d
\n
"
,
rel13
->
rnti
,
eNB
->
ndlsch_RAR
->
rnti
);
//printf("rel13->rnti: %d, eNB->ndlsch_RAR->rnti: %d\n",rel13->rnti,eNB->ndlsch_RAR->rnti);
eNB
->
ndlsch_RAR
->
rnti
=
rel13
->
rnti
;
//check if the PDU is for RAR
//check if the PDU is for RAR
if
(
eNB
->
ndlsch_RAR
!=
NULL
&&
rel13
->
rnti
==
eNB
->
ndlsch_RAR
->
rnti
)
//rnti for the RAR should have been set priviously by the DCI
if
(
eNB
->
ndlsch_RAR
!=
NULL
&&
rel13
->
rnti
==
eNB
->
ndlsch_RAR
->
rnti
)
//rnti for the RAR should have been set priviously by the DCI
{
{
...
@@ -337,10 +338,9 @@ void schedule_response_NB_IoT(Sched_Rsp_NB_IoT_t *Sched_INFO)
...
@@ -337,10 +338,9 @@ void schedule_response_NB_IoT(Sched_Rsp_NB_IoT_t *Sched_INFO)
{
{
case
NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE
:
case
NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE
:
//Remember: there is no DCI for SI information
//Remember: there is no DCI for SI information
LOG_I
(
PHY
,
"Generate DL PDU information from scheduel
r
\n
"
);
//LOG_D(PHY,"Generate DL DCI PDU information from schedule
r\n");
//TODO: separate the ndlsch structure configuration from the DCI (here we will encode only the DCI)
//TODO: separate the ndlsch structure configuration from the DCI (here we will encode only the DCI)
generate_eNB_dlsch_params_NB_IoT
(
eNB
,
proc
,
dl_config_pdu
);
generate_eNB_dlsch_params_NB_IoT
(
eNB
,
proc
,
dl_config_pdu
);
break
;
break
;
case
NFAPI_DL_CONFIG_NBCH_PDU_TYPE
:
case
NFAPI_DL_CONFIG_NBCH_PDU_TYPE
:
...
...
openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c
View file @
410da556
...
@@ -32,6 +32,7 @@
...
@@ -32,6 +32,7 @@
#include "PHY/defs.h"
#include "PHY/defs.h"
#include "PHY/defs_NB_IoT.h"
#include "PHY/defs_NB_IoT.h"
#include "PHY/extern.h"
#include "PHY/LTE_ESTIMATION/defs_NB_IoT.h"
#include "PHY/LTE_ESTIMATION/defs_NB_IoT.h"
#include "PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "PHY/LTE_TRANSPORT/proto_NB_IoT.h"
#include "PHY/LTE_TRANSPORT/proto_NB_IoT.h"
...
@@ -722,7 +723,7 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
...
@@ -722,7 +723,7 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
NB_IoT_eNB_NDLSCH_t
*
ndlsch
;
NB_IoT_eNB_NDLSCH_t
*
ndlsch
;
NB_IoT_eNB_NPDCCH_t
*
npdcch
;
NB_IoT_eNB_NPDCCH_t
*
npdcch
;
eNB
->
DCI_pdu
=
(
DCI_PDU_NB_IoT
*
)
malloc
(
sizeof
(
DCI_PDU_NB_IoT
));
DCI_Content
=
(
DCI_CONTENT
*
)
malloc
(
sizeof
(
DCI_CONTENT
));
DCI_Content
=
(
DCI_CONTENT
*
)
malloc
(
sizeof
(
DCI_CONTENT
));
...
@@ -753,10 +754,10 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
...
@@ -753,10 +754,10 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
// fill the dlsch_ra_NB structure for RAR, and packed the DCI PDU
// fill the dlsch_ra_NB structure for RAR, and packed the DCI PDU
ndlsch
=
eNB
->
ndlsch_ra
;
ndlsch
=
PHY_vars_eNB_g
[
0
][
0
]
->
ndlsch_RAR
;
ndlsch
->
ndlsch_type
=
RAR
;
ndlsch
->
ndlsch_type
=
RAR
;
LOG_I
(
PHY
,
"Generating dlsch params for RA_RNTI and packing DCI
\n
"
);
//
LOG_I(PHY,"Generating dlsch params for RA_RNTI and packing DCI\n");
generate_eNB_dlsch_params_from_dci_NB_IoT
(
eNB
,
generate_eNB_dlsch_params_from_dci_NB_IoT
(
eNB
,
frame
,
frame
,
subframe
,
subframe
,
...
@@ -768,6 +769,7 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
...
@@ -768,6 +769,7 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
aggregation_level
,
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
aggregation_level
,
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
start_symbol
);
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
start_symbol
);
//printf("PHY_vars_eNB_g[0][0]->ndlsch_RAR->rnti = %d\n",PHY_vars_eNB_g[0][0]->ndlsch_RAR->rnti);
//eNB->dlsch_ra_NB->nCCE[subframe] = eNB->DCI_pdu->dci_alloc.firstCCE;
//eNB->dlsch_ra_NB->nCCE[subframe] = eNB->DCI_pdu->dci_alloc.firstCCE;
}
}
else
else
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
View file @
410da556
...
@@ -115,14 +115,17 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
...
@@ -115,14 +115,17 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
while
((
RA_TEMPLATE_NB_IoT
*
)
0
!=
msg2_nodes
){
while
((
RA_TEMPLATE_NB_IoT
*
)
0
!=
msg2_nodes
){
fail
=
0
;
fail
=
0
;
rmax
=
mac_inst
->
rrc_config
.
mac_NPRACH_ConfigSIB
[
msg2_nodes
->
ce_level
].
mac_npdcch_NumRepetitions_RA_NB_IoT
;
//32;
rmax
=
mac_inst
->
rrc_config
.
mac_NPRACH_ConfigSIB
[
msg2_nodes
->
ce_level
].
mac_npdcch_NumRepetitions_RA_NB_IoT
;
//32;
num_candidate
=
8
;
//rmax / r;
num_candidate
=
8
;
//rmax / r;
r
=
rmax
/
num_candidate
;
r
=
rmax
/
num_candidate
;
num_dci_subframe
=
r
;
num_dci_subframe
=
r
;
dci_subframe
=
abs_subframe
;
//mac_inst->current_subframe;
dci_subframe
=
abs_subframe
;
//mac_inst->current_subframe;
LOG_D
(
MAC
,
"rmax : %d, num_dci_subframe : %d, dci_subframe: %d
\n
"
,
rmax
,
r
,
dci_subframe
);
//LOG_I(MAC,"rmax : %d, num_dci_subframe : %d, dci_subframe: %d\n",rmax,r,dci_subframe);
//print_available_resource_DL(mac_inst);
for
(
dci_candidate
=
0
;
dci_candidate
<
num_candidate
;
++
dci_candidate
){
for
(
dci_candidate
=
0
;
dci_candidate
<
num_candidate
;
++
dci_candidate
){
...
@@ -202,7 +205,7 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
...
@@ -202,7 +205,7 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] rnti: %d preamble: %d fail vector %d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
preamble_index
,
fail
);
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] rnti: %d preamble: %d fail vector %d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
preamble_index
,
fail
);
msg2_nodes
=
msg2_nodes
->
next
;
msg2_nodes
=
msg2_nodes
->
next
;
}
else
{
}
else
{
LOG_
I
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] rnti: %d preamble: %d scheduling success
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
preamble_index
);
LOG_
D
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] rnti: %d preamble: %d scheduling success
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
preamble_index
);
dci_result
=
(
schedule_result_t
*
)
calloc
(
1
,
sizeof
(
schedule_result_t
));
dci_result
=
(
schedule_result_t
*
)
calloc
(
1
,
sizeof
(
schedule_result_t
));
msg2_result
=
(
schedule_result_t
*
)
calloc
(
1
,
sizeof
(
schedule_result_t
));
msg2_result
=
(
schedule_result_t
*
)
calloc
(
1
,
sizeof
(
schedule_result_t
));
dci_n0
=
(
DCIFormatN0_t
*
)
malloc
(
sizeof
(
DCIFormatN0_t
));
dci_n0
=
(
DCIFormatN0_t
*
)
malloc
(
sizeof
(
DCIFormatN0_t
));
...
@@ -273,12 +276,16 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
...
@@ -273,12 +276,16 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
msg2_nodes
->
ue_rnti
=
tc_rnti
;
msg2_nodes
->
ue_rnti
=
tc_rnti
;
LOG_I
(
MAC
,
"[%04d][RA scheduler][MSG2] RARDCI %d-%d RAR %d-%d MSG3 %d-%d
\n
"
,
abs_subframe
-
1
,
dci_first_subframe
,
dci_end_subframe
,
msg2_first_subframe
,
msg2_end_subframe
,
npusch_info
.
sf_start
,
npusch_info
.
sf_end
);
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG2] RARDCI %d-%d RAR %d-%d MSG3 %d-%d
\n
"
,
abs_subframe
-
1
,
dci_first_subframe
,
dci_end_subframe
,
msg2_first_subframe
,
msg2_end_subframe
,
npusch_info
.
sf_start
,
npusch_info
.
sf_end
);
LOG_I
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] Change RA-RNTI %d->T-CRNTI %d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
ue_rnti
);
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] Change RA-RNTI %d->T-CRNTI %d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
msg2_nodes
->
ra_rnti
,
msg2_nodes
->
ue_rnti
);
LOG_I
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] RAR DCI %d-%d RAR %d-%d MSG3 %d-%d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
dci_first_subframe
,
dci_end_subframe
,
msg2_first_subframe
,
msg2_end_subframe
,
npusch_info
.
sf_start
,
npusch_info
.
sf_end
);
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG2][CE%d] RAR DCI %d-%d RAR %d-%d MSG3 %d-%d
\n
"
,
abs_subframe
-
1
,
msg2_nodes
->
ce_level
,
dci_first_subframe
,
dci_end_subframe
,
msg2_first_subframe
,
msg2_end_subframe
,
npusch_info
.
sf_start
,
npusch_info
.
sf_end
);
print_available_resource_DL
(
mac_inst
);
//LOG_D(MAC,"dci_node:%p dci_node_prev:%p %3d-%3d\n", dci_node, dci_node->prev,dci_node->start_subframe, dci_node->end_subframe);
// fill dci resource
// fill dci resource
fill_resource_DL
(
mac_inst
,
dci_node
,
dci_first_subframe
,
dci_end_subframe
,
dci_result
);
fill_resource_DL
(
mac_inst
,
dci_node
,
dci_first_subframe
,
dci_end_subframe
,
dci_result
);
print_available_resource_DL
(
mac_inst
);
//LOG_D(MAC,"msg2_node:%p msg2_node_prev:%p %3d-%3d\n", msg2_node, msg2_node->prev,msg2_node->start_subframe, msg2_node->end_subframe);
// fill msg2 resource
// fill msg2 resource
fill_resource_DL
(
mac_inst
,
msg2_node
,
msg2_first_subframe
,
msg2_end_subframe
,
msg2_result
);
fill_resource_DL
(
mac_inst
,
msg2_node
,
msg2_first_subframe
,
msg2_end_subframe
,
msg2_result
);
...
@@ -323,7 +330,7 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
...
@@ -323,7 +330,7 @@ void schedule_rar_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
mac_inst
->
RA_msg3_list
.
tail
=
migrate_node
;
mac_inst
->
RA_msg3_list
.
tail
=
migrate_node
;
}
}
LOG_
I
(
MAC
,
"RAR schedule Done
\n
"
);
LOG_
D
(
MAC
,
"RAR schedule Done
\n
"
);
}
}
...
...
openair2/LAYER2/MAC/output_handler_NB_IoT.c
View file @
410da556
...
@@ -175,7 +175,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
...
@@ -175,7 +175,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
if
(
schedule_result_list_DL
->
direction
==
DL
)
if
(
schedule_result_list_DL
->
direction
==
DL
)
{
{
LOG_
I
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL_DCI
\n
"
,
hypersfn
,
frame
,
subframe
);
LOG_
D
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL_DCI
\n
"
,
hypersfn
,
frame
,
subframe
);
//LOG_D(MAC,"Sched Info DL DCI here\n");
//LOG_D(MAC,"Sched Info DL DCI here\n");
//SCHED_info->DL_req = (nfapi_dl_config_request_t*) malloc (sizeof(nfapi_dl_config_request_t));
//SCHED_info->DL_req = (nfapi_dl_config_request_t*) malloc (sizeof(nfapi_dl_config_request_t));
//SCHED_info->DL_req->dl_config_request_body.number_pdu = 0;
//SCHED_info->DL_req->dl_config_request_body.number_pdu = 0;
...
@@ -183,6 +183,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
...
@@ -183,6 +183,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
dl_config_pdu
=
SCHED_info
->
DL_req
->
dl_config_request_body
.
dl_config_pdu_list
;
dl_config_pdu
=
SCHED_info
->
DL_req
->
dl_config_request_body
.
dl_config_pdu_list
;
SCHED_info
->
DL_req
->
dl_config_request_body
.
number_dci
=
1
;
SCHED_info
->
DL_req
->
dl_config_request_body
.
number_dci
=
1
;
SCHED_info
->
DL_req
->
dl_config_request_body
.
number_pdu
=
1
;
DCI_pdu
=
schedule_result_list_DL
->
DCI_pdu
;
DCI_pdu
=
schedule_result_list_DL
->
DCI_pdu
;
// not consider the case transmitting 2 DCIs for the moment also not consider N2 now
// not consider the case transmitting 2 DCIs for the moment also not consider N2 now
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE
;
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE
;
...
@@ -204,7 +205,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
...
@@ -204,7 +205,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
dci_subframe_repetition_number
=
((
DCIFormatN1_t
*
)
DCI_pdu
)
->
DCIRep
;
dl_config_pdu
->
npdcch_pdu
.
npdcch_pdu_rel13
.
dci_subframe_repetition_number
=
((
DCIFormatN1_t
*
)
DCI_pdu
)
->
DCIRep
;
}
else
if
(
schedule_result_list_DL
->
direction
==
UL
)
}
else
if
(
schedule_result_list_DL
->
direction
==
UL
)
{
{
LOG_
I
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL_DCI
\n
"
,
hypersfn
,
frame
,
subframe
);
LOG_
D
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL_DCI
\n
"
,
hypersfn
,
frame
,
subframe
);
//SCHED_info->HI_DCI0_req = (nfapi_hi_dci0_request_t*)malloc(sizeof(nfapi_hi_dci0_request_t));
//SCHED_info->HI_DCI0_req = (nfapi_hi_dci0_request_t*)malloc(sizeof(nfapi_hi_dci0_request_t));
//SCHED_info->HI_DCI0_req->hi_dci0_request_body.number_of_dci = 0;
//SCHED_info->HI_DCI0_req->hi_dci0_request_body.number_of_dci = 0;
//SCHED_info->HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list = (nfapi_hi_dci0_request_pdu_t*)malloc(sizeof(nfapi_hi_dci0_request_pdu_t));
//SCHED_info->HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list = (nfapi_hi_dci0_request_pdu_t*)malloc(sizeof(nfapi_hi_dci0_request_pdu_t));
...
@@ -227,7 +228,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
...
@@ -227,7 +228,7 @@ int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_
}
}
break
;
break
;
case
NPDSCH
:
case
NPDSCH
:
LOG_
I
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL Data
\n
"
,
hypersfn
,
frame
,
subframe
);
LOG_
D
(
MAC
,
"[hypersfn:%2d][frame:%2d][subframe:%2d]NB-IoT fill DL Data
\n
"
,
hypersfn
,
frame
,
subframe
);
//LOG_I(MAC,"NB-IoT fill DL Data\n");
//LOG_I(MAC,"NB-IoT fill DL Data\n");
//SCHED_info->DL_req = (nfapi_dl_config_request_t*) malloc (sizeof(nfapi_dl_config_request_t));
//SCHED_info->DL_req = (nfapi_dl_config_request_t*) malloc (sizeof(nfapi_dl_config_request_t));
//SCHED_info->DL_req->dl_config_request_body.number_pdu = 0;
//SCHED_info->DL_req->dl_config_request_body.number_pdu = 0;
...
...
openair2/LAYER2/MAC/schedule_tool_NB_IoT.c
View file @
410da556
...
@@ -1003,7 +1003,7 @@ void extend_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, int max_subfram
...
@@ -1003,7 +1003,7 @@ void extend_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, int max_subfram
LOG_D
(
MAC
,
"[extend DL] add new node !
\n
"
);
LOG_D
(
MAC
,
"[extend DL] add new node !
\n
"
);
new_node
=
(
available_resource_DL_t
*
)
malloc
(
sizeof
(
available_resource_DL_t
));
new_node
=
(
available_resource_DL_t
*
)
malloc
(
sizeof
(
available_resource_DL_t
));
new_node
->
prev
=
available_resource_DL_last
;
available_resource_DL_last
->
next
=
new_node
;
available_resource_DL_last
->
next
=
new_node
;
new_node
->
start_subframe
=
mac_inst
->
schedule_subframe_DL
+
1
;
new_node
->
start_subframe
=
mac_inst
->
schedule_subframe_DL
+
1
;
new_node
->
end_subframe
=
max_subframe
;
new_node
->
end_subframe
=
max_subframe
;
...
@@ -1285,9 +1285,10 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
...
@@ -1285,9 +1285,10 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
// divided into two node, always insert before original node, so won't happen that temp is the last node of the list.
// divided into two node, always insert before original node, so won't happen that temp is the last node of the list.
// A | node | B
// A | node | B
// A | temp | node | B
// A | temp | node | B
LOG_D
(
MAC
,
"Case 0 [b], node : %p node_prev : %p
\n
"
,
node
,
node
->
prev
);
temp
=
(
available_resource_DL_t
*
)
malloc
(
sizeof
(
available_resource_DL_t
));
temp
=
(
available_resource_DL_t
*
)
malloc
(
sizeof
(
available_resource_DL_t
));
if
(
node
->
prev
){
if
(
node
->
prev
){
//LOG_I(MAC,"start_subframe : %d\n",node->prev->start_subframe);
node
->
prev
->
next
=
temp
;
node
->
prev
->
next
=
temp
;
}
else
{
}
else
{
available_resource_DL
=
temp
;
available_resource_DL
=
temp
;
...
@@ -1301,9 +1302,10 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
...
@@ -1301,9 +1302,10 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
temp
->
end_subframe
=
start_subframe
-
1
;
temp
->
end_subframe
=
start_subframe
-
1
;
node
->
start_subframe
=
end_subframe
+
1
;
node
->
start_subframe
=
end_subframe
+
1
;
LOG_D
(
MAC
,
"Case 0 [a], node : %p node_prev : %p
\n
"
,
node
,
node
->
prev
);
break
;
break
;
case
1
:
case
1
:
LOG_D
(
MAC
,
"Case 1, node : %p node_prev : %p
\n
"
,
node
,
node
->
prev
);
// keep one node
// keep one node
if
(
align_left
){
if
(
align_left
){
node
->
start_subframe
=
end_subframe
+
1
;
node
->
start_subframe
=
end_subframe
+
1
;
...
@@ -1313,6 +1315,7 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
...
@@ -1313,6 +1315,7 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
break
;
break
;
case
2
:
case
2
:
LOG_D
(
MAC
,
"Case 2 [b], node : %p node_prev : %p
\n
"
,
node
,
node
->
prev
);
// delete
// delete
if
(
node
->
next
){
if
(
node
->
next
){
node
->
next
->
prev
=
node
->
prev
;
node
->
next
->
prev
=
node
->
prev
;
...
@@ -1325,6 +1328,7 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
...
@@ -1325,6 +1328,7 @@ void fill_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, available_resource_DL_t *no
}
else
{
}
else
{
available_resource_DL
=
node
->
next
;
available_resource_DL
=
node
->
next
;
}
}
LOG_D
(
MAC
,
"Case 2 [a], node : %p node_prev : %p
\n
"
,
node
,
node
->
prev
);
free
(
node
);
free
(
node
);
break
;
break
;
...
@@ -1468,7 +1472,7 @@ void print_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst){
...
@@ -1468,7 +1472,7 @@ void print_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst){
int
i
=
0
;
int
i
=
0
;
LOG_D
(
MAC
,
"=== print available resource === t=%d
\n
sched subframe: %d, list end: %d-%d
\n
"
,
mac_inst
->
current_subframe
,
mac_inst
->
schedule_subframe_DL
,
available_resource_DL_last
->
start_subframe
,
available_resource_DL_last
->
end_subframe
);
LOG_D
(
MAC
,
"=== print available resource === t=%d
\n
sched subframe: %d, list end: %d-%d
\n
"
,
mac_inst
->
current_subframe
,
mac_inst
->
schedule_subframe_DL
,
available_resource_DL_last
->
start_subframe
,
available_resource_DL_last
->
end_subframe
);
while
(
pt
){
while
(
pt
){
LOG_D
(
MAC
,
"[%2d] %p %3d-%3d
\n
"
,
i
,
pt
,
pt
->
start_subframe
,
pt
->
end_subframe
);
LOG_D
(
MAC
,
"[%2d] %p %3d-%3d
prev:%p
\n
"
,
i
,
pt
,
pt
->
start_subframe
,
pt
->
end_subframe
,
pt
->
prev
);
pt
=
pt
->
next
;
pt
=
pt
->
next
;
}
}
LOG_D
(
MAC
,
"
\n
"
);
LOG_D
(
MAC
,
"
\n
"
);
...
...
openair2/PHY_INTERFACE/IF_Module_L2_primitives_NB_IoT.c
View file @
410da556
...
@@ -14,12 +14,14 @@ void UL_indication_NB_IoT(UL_IND_NB_IoT_t *UL_INFO)
...
@@ -14,12 +14,14 @@ void UL_indication_NB_IoT(UL_IND_NB_IoT_t *UL_INFO)
//If there is a preamble, do the initiate RA procedure
//If there is a preamble, do the initiate RA procedure
if
(
UL_INFO
->
nrach_ind
.
number_of_initial_scs_detected
>
0
)
if
(
UL_INFO
->
nrach_ind
.
number_of_initial_scs_detected
>
0
)
{
{
for
(
i
=
0
;
i
<
UL_INFO
->
nrach_ind
.
number_of_initial_scs_detected
;
i
++
)
// only use one preamble now
//for(i=0;i<UL_INFO->nrach_ind.number_of_initial_scs_detected;i++)
for
(
i
=
0
;
i
<
1
;
i
++
)
{
{
// initiate_ra here, some useful inforamtion :
// initiate_ra here, some useful inforamtion :
//(UL_INFO->NRACH.nrach_pdu_list+i)->nrach_indication_rel13.initial_sc
//(UL_INFO->NRACH.nrach_pdu_list+i)->nrach_indication_rel13.initial_sc
//(UL_INFO->NRACH.nrach_pdu_list+i)->nrach_indication_rel13.timing_advance
//(UL_INFO->NRACH.nrach_pdu_list+i)->nrach_indication_rel13.timing_advance
LOG_
I
(
MAC
,
"Init_RA_NB_IoT in
\n
"
);
LOG_
D
(
MAC
,
"Init_RA_NB_IoT in, index of sc = %d
\n
"
,(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
initial_sc
);
init_RA_NB_IoT
(
mac_inst
,
init_RA_NB_IoT
(
mac_inst
,
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
initial_sc
,
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
initial_sc
,
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
nrach_ce_level
,
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
nrach_ce_level
,
...
@@ -27,11 +29,11 @@ void UL_indication_NB_IoT(UL_IND_NB_IoT_t *UL_INFO)
...
@@ -27,11 +29,11 @@ void UL_indication_NB_IoT(UL_IND_NB_IoT_t *UL_INFO)
//timing_offset = Timing_advance * 16
//timing_offset = Timing_advance * 16
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
timing_advance
*
16
(
UL_INFO
->
nrach_ind
.
nrach_pdu_list
+
i
)
->
nrach_indication_rel13
.
timing_advance
*
16
);
);
LOG_
I
(
MAC
,
"Init_RA_NB_IoT Out
\n
"
);
LOG_
D
(
MAC
,
"Init_RA_NB_IoT Out
\n
"
);
}
}
}
}
UL_INFO
->
nrach_ind
.
number_of_initial_scs_detected
=
0
;
UL_INFO
->
nrach_ind
.
number_of_initial_scs_detected
=
0
;
/* Disable uplink RX function for now
/* Disable uplink RX function for now
...
...
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