Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Merge Requests
20
Merge Requests
20
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
oai
openairinterface5G
Commits
9c820805
Commit
9c820805
authored
Feb 05, 2018
by
jftt_wangshanshan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TDD config1 initial merge
parent
10d7599d
Changes
22
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
372 additions
and
155 deletions
+372
-155
nfapi/oai_integration/nfapi_pnf.c
nfapi/oai_integration/nfapi_pnf.c
+1
-1
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+9
-8
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+1
-1
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+6
-6
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+4
-3
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+1
-0
openair1/SCHED/fapi_l1.c
openair1/SCHED/fapi_l1.c
+28
-19
openair1/SCHED/phy_procedures_lte_common.c
openair1/SCHED/phy_procedures_lte_common.c
+24
-0
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+21
-9
openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+1
-0
openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
+1
-0
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+2
-2
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+1
-1
openair2/LAYER2/MAC/eNB_scheduler_RA.c
openair2/LAYER2/MAC/eNB_scheduler_RA.c
+29
-21
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+8
-10
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+165
-30
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+32
-19
openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
+2
-2
openair2/LAYER2/MAC/main.c
openair2/LAYER2/MAC/main.c
+4
-3
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+14
-11
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+6
-5
openair2/PHY_INTERFACE/IF_Module.c
openair2/PHY_INTERFACE/IF_Module.c
+12
-4
No files found.
nfapi/oai_integration/nfapi_pnf.c
View file @
9c820805
...
...
@@ -839,7 +839,7 @@ int pnf_phy_dl_config_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request
AssertFatal
(
UE_id
<
NUMBER_OF_UE_MAX
,
"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)
\n
"
,
UE_id
,
NUMBER_OF_UE_MAX
);
LTE_eNB_DLSCH_t
*
dlsch0
=
eNB
->
dlsch
[
UE_id
][
0
];
//LTE_eNB_DLSCH_t *dlsch1 = eNB->dlsch[UE_id][1];
int
harq_pid
=
dlsch0
->
harq_ids
[
sf
];
int
harq_pid
=
dlsch0
->
harq_ids
[
sf
n
%
2
][
sf
];
uint8_t
*
dlsch_sdu
=
tx_pdus
[
UE_id
][
harq_pid
];
memcpy
(
dlsch_sdu
,
tx_pdu
->
segments
[
0
].
segment_data
,
tx_pdu
->
segments
[
0
].
segment_length
);
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
9c820805
...
...
@@ -1266,14 +1266,14 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t
dlsch0_harq
->
mcs
=
rel8
->
mcs_1
;
dlsch0_harq
->
Qm
=
2
;
dlsch0_harq
->
TBS
=
TBStable
[
I_mcs
][
NPRB
-
1
];
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
#ifdef UE_EXPANSION
dlsch0
->
active
[
subframe
]
=
1
;
#else
dlsch0
->
active
=
1
;
#endif
dlsch0
->
rnti
=
rel8
->
rnti
;
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
//
dlsch0->harq_ids[subframe] = rel8->harq_process;
if
(
dlsch0_harq
->
round
==
0
)
dlsch0_harq
->
status
=
ACTIVE
;
...
...
@@ -1454,7 +1454,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t
}
LOG_D
(
PHY
,
"DCI: Set harq_ids[%d] to %d (%p)
\n
"
,
subframe
,
rel8
->
harq_process
,
dlsch0
);
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_mask
|=
(
1
<<
rel8
->
harq_process
);
...
...
@@ -1621,8 +1621,8 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t
dlsch0
->
subframe_tx
[
subframe
]
=
1
;
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch1
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
dlsch1
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
// printf("Setting DLSCH harq id %d to subframe %d\n",harq_pid,subframe);
...
...
@@ -2076,11 +2076,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t
if
(
dlsch0
!=
NULL
){
dlsch0
->
subframe_tx
[
subframe
]
=
1
;
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
}
if
(
dlsch1_harq
!=
NULL
){
dlsch1
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch1
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel8
->
harq_process
;
}
...
...
@@ -2290,6 +2290,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
;
int
UE_id
;
int
subframe
=
proc
->
subframe_tx
;
int
frame
=
proc
->
frame_tx
;
dci_alloc
->
firstCCE
=
rel13
->
ecce_index
;
dci_alloc
->
L
=
rel13
->
aggregation_level
;
...
...
@@ -2533,7 +2534,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d
}
dlsch0
->
harq_ids
[
subframe
]
=
rel13
->
harq_process
;
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
rel13
->
harq_process
;
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
9c820805
...
...
@@ -291,7 +291,7 @@ typedef struct {
/// First CCE of last PDSCH scheduling per subframe. Again used during PUCCH detection for ACK/NAK.
uint8_t
nCCE
[
10
];
/// Process ID's per subframe. Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids
uint8_t
harq_ids
[
10
];
uint8_t
harq_ids
[
2
][
10
];
/// Window size (in outgoing transport blocks) for fine-grain rate adaptation
uint8_t
ra_window_size
;
/// First-round error threshold for fine-grain rate adaptation
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
9c820805
...
...
@@ -167,8 +167,8 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
}*/
for
(
i
=
0
;
i
<
1
0
;
i
++
)
dlsch
->
harq_ids
[
i
]
=
Mdlharq
;
for
(
i
=
0
;
i
<
2
0
;
i
++
)
dlsch
->
harq_ids
[
i
/
10
][
i
%
10
]
=
Mdlharq
;
for
(
i
=
0
;
i
<
Mdlharq
;
i
++
)
{
dlsch
->
harq_processes
[
i
]
=
(
LTE_DL_eNB_HARQ_t
*
)
malloc16
(
sizeof
(
LTE_DL_eNB_HARQ_t
));
...
...
@@ -254,8 +254,8 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch)
#endif
dlsch
->
harq_mask
=
0
;
for
(
i
=
0
;
i
<
1
0
;
i
++
)
dlsch
->
harq_ids
[
i
]
=
Mdlharq
;
for
(
i
=
0
;
i
<
2
0
;
i
++
)
dlsch
->
harq_ids
[
i
/
10
][
i
%
10
]
=
Mdlharq
;
for
(
i
=
0
;
i
<
Mdlharq
;
i
++
)
{
if
(
dlsch
->
harq_processes
[
i
])
{
...
...
@@ -399,7 +399,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
unsigned
int
crc
=
1
;
unsigned
short
iind
;
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
subframe
];
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
frame
%
2
][
subframe
];
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
A
;
unsigned
char
mod_order
;
...
...
@@ -583,7 +583,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
unsigned
short
iind
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
eNB
->
frame_parms
;
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
subframe
];
unsigned
char
harq_pid
=
dlsch
->
harq_ids
[
frame
%
2
][
subframe
];
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
A
;
unsigned
char
mod_order
;
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
9c820805
...
...
@@ -1990,6 +1990,7 @@ inline int check_skip_dc(int rb,LTE_DL_FRAME_PARMS *frame_parms) {
int
dlsch_modulation
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int32_t
**
txdataF
,
int16_t
amp
,
int
frame
,
uint32_t
subframe_offset
,
uint8_t
num_pdcch_symbols
,
LTE_eNB_DLSCH_t
*
dlsch0
,
...
...
@@ -2062,7 +2063,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
if
((
dlsch0
!=
NULL
)
&&
(
dlsch1
!=
NULL
)){
harq_pid
=
dlsch0
->
harq_ids
[
subframe_offset
];
harq_pid
=
dlsch0
->
harq_ids
[
frame
%
2
][
subframe_offset
];
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
mod_order0
=
dlsch0_harq
->
Qm
;
...
...
@@ -2079,7 +2080,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
}
else
if
((
dlsch0
!=
NULL
)
&&
(
dlsch1
==
NULL
)){
harq_pid
=
dlsch0
->
harq_ids
[
subframe_offset
];
harq_pid
=
dlsch0
->
harq_ids
[
frame
%
2
][
subframe_offset
];
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
mod_order0
=
dlsch0_harq
->
Qm
;
...
...
@@ -2096,7 +2097,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
}
else
if
((
dlsch0
==
NULL
)
&&
(
dlsch1
!=
NULL
)){
harq_pid
=
dlsch1
->
harq_ids
[
subframe_offset
];
harq_pid
=
dlsch1
->
harq_ids
[
frame
%
2
][
subframe_offset
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch1_harq
->
mimo_mode
;
mod_order0
=
dlsch1_harq
->
Qm
;
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
9c820805
...
...
@@ -290,6 +290,7 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
int32_t
dlsch_modulation
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int32_t
**
txdataF
,
int16_t
amp
,
int
frame
,
uint32_t
sub_frame_offset
,
uint8_t
num_pdcch_symbols
,
LTE_eNB_DLSCH_t
*
dlsch0
,
...
...
openair1/SCHED/fapi_l1.c
View file @
9c820805
...
...
@@ -161,24 +161,24 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr
dlsch1
=
eNB
->
dlsch
[
UE_id
][
1
];
#ifdef Rel14
if
((
rel13
->
pdsch_payload_type
<
2
)
&&
(
rel13
->
ue_type
>
0
))
dlsch0
->
harq_ids
[
subframe
]
=
0
;
if
((
rel13
->
pdsch_payload_type
<
2
)
&&
(
rel13
->
ue_type
>
0
))
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
]
=
0
;
#endif
harq_pid
=
dlsch0
->
harq_ids
[
subframe
];
harq_pid
=
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
];
AssertFatal
((
harq_pid
>=
0
)
&&
(
harq_pid
<
8
),
"harq_pid %d not in 0...7 frame:%d subframe:%d subframe(TX):%d rnti:%x UE_id:%d dlsch0[harq_ids:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]
\n
"
,
harq_pid
,
frame
,
subframe
,
proc
->
subframe_tx
,
rel8
->
rnti
,
UE_id
,
dlsch0
->
harq_ids
[
0
],
dlsch0
->
harq_ids
[
1
],
dlsch0
->
harq_ids
[
2
],
dlsch0
->
harq_ids
[
3
],
dlsch0
->
harq_ids
[
4
],
dlsch0
->
harq_ids
[
5
],
dlsch0
->
harq_ids
[
6
],
dlsch0
->
harq_ids
[
7
],
dlsch0
->
harq_ids
[
8
],
dlsch0
->
harq_ids
[
9
]
dlsch0
->
harq_ids
[
frame
%
2
][
0
],
dlsch0
->
harq_ids
[
frame
%
2
][
1
],
dlsch0
->
harq_ids
[
frame
%
2
][
2
],
dlsch0
->
harq_ids
[
frame
%
2
][
3
],
dlsch0
->
harq_ids
[
frame
%
2
][
4
],
dlsch0
->
harq_ids
[
frame
%
2
][
5
],
dlsch0
->
harq_ids
[
frame
%
2
][
6
],
dlsch0
->
harq_ids
[
frame
%
2
][
7
],
dlsch0
->
harq_ids
[
frame
%
2
][
8
],
dlsch0
->
harq_ids
[
frame
%
2
][
9
]
);
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
...
...
@@ -331,6 +331,9 @@ void handle_ulsch_harq_pdu(
ulsch_harq
->
subframe
=
subframe
;
ulsch_harq
->
O_ACK
=
harq_information
->
harq_information_rel10
.
harq_size
;
ulsch
->
beta_offset_harqack_times8
=
to_beta_offset_harqack
[
harq_information
->
harq_information_rel10
.
delta_offset_harq
];
if
(
harq_information
->
harq_information_rel10
.
ack_nack_mode
==
0
)
//bundling
ulsch
->
bundling
=
1
;
}
uint16_t
to_beta_offset_ri
[
16
]
=
{
9
,
13
,
16
,
20
,
25
,
32
,
40
,
50
,
64
,
80
,
101
,
127
,
160
,
0
,
0
,
0
};
...
...
@@ -678,13 +681,19 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
=
0
;
eNB
->
phich_vars
[
subframe
&
1
].
num_hi
=
0
;
LOG_D
(
PHY
,
"NFAPI: Sched_INFO:SFN/SF:%04d%d DL_req:SFN/SF:%04d%d:dl_pdu:%d tx_req:SFN/SF:%04d%d:pdus:%d hi_dci0:SFN/SF:%04d%d:pdus:%d ul_cfg:SFN/SF:%04d%d:pdus:%d num_pdcch_symbols:%d
\n
"
,
frame
,
subframe
,
NFAPI_SFNSF2SFN
(
DL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
),
number_dl_pdu
,
NFAPI_SFNSF2SFN
(
TX_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
TX_req
->
sfn_sf
),
TX_req
->
tx_request_body
.
number_of_pdus
,
NFAPI_SFNSF2SFN
(
HI_DCI0_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
),
number_hi_dci0_pdu
,
NFAPI_SFNSF2SFN
(
UL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_req
->
sfn_sf
),
number_ul_pdu
,
eNB
->
pdcch_vars
[
subframe
&
1
].
num_pdcch_symbols
);
LOG_I
(
PHY
,
"NFAPI: Sched_INFO:SFN/SF:%04d%d DL_req:SFN/SF:%04d%d:dl_pdu:%d tx_req:SFN/SF:%04d%d:pdus:%d
\n
"
,
frame
,
subframe
,
NFAPI_SFNSF2SFN
(
DL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
),
number_dl_pdu
,
NFAPI_SFNSF2SFN
(
TX_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
TX_req
->
sfn_sf
),
TX_req
->
tx_request_body
.
number_of_pdus
);
LOG_I
(
PHY
,
"NFAPI: hi_dci0:SFN/SF:%04d%d:pdus:%d
\n
"
,
NFAPI_SFNSF2SFN
(
HI_DCI0_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
),
number_hi_dci0_pdu
);
if
(
UL_req
!=
NULL
)
LOG_I
(
PHY
,
"NFAPI: ul_cfg:SFN/SF:%04d%d:pdus:%d num_pdcch_symbols:%d
\n
"
,
NFAPI_SFNSF2SFN
(
UL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
UL_req
->
sfn_sf
),
number_ul_pdu
,
eNB
->
pdcch_vars
[
subframe
&
1
].
num_pdcch_symbols
);
int
do_oai
=
0
;
int
dont_send
=
0
;
...
...
openair1/SCHED/phy_procedures_lte_common.c
View file @
9c820805
...
...
@@ -336,6 +336,29 @@ unsigned char ul_ACK_subframe2_dl_subframe(LTE_DL_FRAME_PARMS *frame_parms,unsig
return
(
0
);
}
unsigned
char
ul_ACK_subframe2_dl_frame
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int
frame
,
unsigned
char
subframe
,
unsigned
char
subframe_tx
)
{
if
(
frame_parms
->
frame_type
==
FDD
)
{
return
(((
subframe_tx
>
subframe
)
?
frame
-
1
:
frame
)
+
1024
)
%
1024
;
}
else
{
switch
(
frame_parms
->
tdd_config
)
{
case
3
:
//TODO
break
;
case
4
:
//TODO
break
;
case
1
:
return
(((
subframe_tx
>
subframe
)
?
frame
-
1
:
frame
)
+
1024
)
%
1024
;
break
;
}
}
return
(
0
);
}
unsigned
char
ul_ACK_subframe2_M
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
unsigned
char
subframe
)
{
...
...
@@ -383,6 +406,7 @@ unsigned char ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char s
break
;
case
1
:
return
1
;
// don't ACK special subframe for now
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
2
);
}
else
if
(
subframe
==
3
)
{
// ACK subframe 9
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
9c820805
...
...
@@ -379,6 +379,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
dlsch_modulation
(
eNB
,
eNB
->
common_vars
.
txdataF
,
AMP
,
frame
,
subframe
,
dlsch_harq
->
pdsch_start
,
dlsch
,
...
...
@@ -540,7 +541,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
#endif
// get harq_pid
harq_pid
=
dlsch0
->
harq_ids
[
subframe
];
harq_pid
=
dlsch0
->
harq_ids
[
frame
%
2
][
subframe
];
AssertFatal
(
harq_pid
>=
0
,
"harq_pid is negative
\n
"
);
if
(
harq_pid
>=
8
)
...
...
@@ -1341,7 +1342,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
const
int
frame
=
proc
->
frame_rx
;
if
(
fp
->
frame_type
==
FDD
)
harq_pid
=
((
10
*
frame
)
+
subframe
)
&
7
;
else
harq_pid
=
subframe
%
10
;
else
harq_pid
=
subframe
2harq_pid
(
&
eNB
->
frame_parms
,
frame
,
subframe
)
;
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
ulsch
=
eNB
->
ulsch
[
i
];
...
...
@@ -1638,7 +1639,7 @@ void release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,uint8_t subf
LTE_eNB_DLSCH_t
*
dlsch0
=
NULL
,
*
dlsch1
=
NULL
;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
,
*
dlsch1_harq
=
NULL
;
int
harq_pid
;
int
subframe_tx
;
int
subframe_tx
,
frame_tx
;
int
M
,
m
;
AssertFatal
(
UE_id
!=-
1
,
"no existing dlsch context
\n
"
);
...
...
@@ -1648,7 +1649,9 @@ void release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,uint8_t subf
if
(
eNB
->
frame_parms
.
frame_type
==
FDD
)
{
subframe_tx
=
(
subframe
+
6
)
%
10
;
harq_pid
=
dlsch0
->
harq_ids
[
subframe_tx
];
frame_tx
=
ul_ACK_subframe2_dl_frame
(
&
eNB
->
frame_parms
,
frame
,
subframe
,
subframe_tx
);
harq_pid
=
dlsch0
->
harq_ids
[
frame_tx
%
2
][
subframe_tx
];
// or just use 0 for fdd?
AssertFatal
((
harq_pid
>=
0
)
&&
(
harq_pid
<
10
),
"harq_pid %d not in 0...9
\n
"
,
harq_pid
);
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
...
...
@@ -1671,8 +1674,9 @@ void release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,uint8_t subf
subframe_tx
=
ul_ACK_subframe2_dl_subframe
(
&
eNB
->
frame_parms
,
subframe
,
m
);
frame_tx
=
ul_ACK_subframe2_dl_frame
(
&
eNB
->
frame_parms
,
frame
,
subframe
,
subframe_tx
);
if
(((
1
<<
m
)
&
mask
)
>
0
)
{
harq_pid
=
dlsch0
->
harq_ids
[
subframe_tx
];
harq_pid
=
dlsch0
->
harq_ids
[
frame_tx
%
2
]
[
subframe_tx
];
if
((
harq_pid
>=
0
)
&&
(
harq_pid
<
10
))
{
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
...
...
@@ -1695,7 +1699,7 @@ int getM(PHY_VARS_eNB *eNB,int frame,int subframe) {
LTE_eNB_DLSCH_t
*
dlsch0
=
NULL
,
*
dlsch1
=
NULL
;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
,
*
dlsch1_harq
=
NULL
;
int
harq_pid
;
int
subframe_tx
;
int
subframe_tx
,
frame_tx
;
int
m
;
M
=
ul_ACK_subframe2_M
(
&
eNB
->
frame_parms
,
...
...
@@ -1705,7 +1709,10 @@ int getM(PHY_VARS_eNB *eNB,int frame,int subframe) {
subframe_tx
=
ul_ACK_subframe2_dl_subframe
(
&
eNB
->
frame_parms
,
subframe
,
m
);
harq_pid
=
dlsch0
->
harq_ids
[
subframe_tx
];
frame_tx
=
ul_ACK_subframe2_dl_frame
(
&
eNB
->
frame_parms
,
frame
,
subframe
,
subframe_tx
);
harq_pid
=
dlsch0
->
harq_ids
[
frame_tx
%
2
][
subframe_tx
];
if
(
harq_pid
>=
0
&&
harq_pid
<
10
)
{
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
...
...
@@ -1813,7 +1820,7 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
for
(
i
=
0
;
i
<
ulsch_harq
->
O_ACK
;
i
++
)
{
AssertFatal
(
ulsch_harq
->
o_ACK
[
i
]
==
0
||
ulsch_harq
->
o_ACK
[
i
]
==
1
,
"harq_ack[%d] is %d, should be 1,2 or 4
\n
"
,
i
,
ulsch_harq
->
o_ACK
[
i
]);
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
multiplex
.
value_0
=
2
-
ulsch_harq
->
o_ACK
[
i
];
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
2
-
ulsch_harq
->
o_ACK
[
i
];
// release DLSCH if needed
if
(
ulsch_harq
->
o_ACK
[
i
]
==
1
)
release_harq
(
eNB
,
UE_id
,
i
,
frame
,
subframe
,
0xffff
);
if
(
M
==
1
&&
ulsch_harq
->
O_ACK
==
1
&&
ulsch_harq
->
o_ACK
[
i
]
==
1
)
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
...
...
@@ -1915,7 +1922,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
mode
=
tdd_mapping_mode
;
LOG_D
(
PHY
,
"%s(eNB, uci_harq format %d, rnti:%04x, frame:%d, subframe:%d, tdd_mapping_mode:%d) harq_ack[0]:%d harq_ack[1]:%d
\n
"
,
__FUNCTION__
,
uci
->
pucch_fmt
,
uci
->
rnti
,
frame
,
subframe
,
tdd_mapping_mode
,
harq_ack
[
0
],
harq_ack
[
1
]);
switch
(
tdd_mapping_mode
)
{
case
0
:
// bundling
...
...
@@ -1977,15 +1984,18 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
case
2
:
// special bundling (SR collision)
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
1
;
pdu
->
harq_indication_tdd_rel13
.
mode
=
0
;
int
tdd_config5_sf2scheds
=
0
;
if
(
eNB
->
frame_parms
.
tdd_config
==
5
)
tdd_config5_sf2scheds
=
getM
(
eNB
,
frame
,
subframe
);
switch
(
harq_ack
[
0
])
{
case
0
:
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
// anaake
break
;
case
1
:
// check if M=1,4,7
if
(
uci
->
num_pucch_resources
==
1
||
uci
->
num_pucch_resources
==
4
||
tdd_config5_sf2scheds
==
1
||
tdd_config5_sf2scheds
==
4
||
tdd_config5_sf2scheds
==
7
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
// anaake
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
...
...
@@ -1993,6 +2003,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
case
2
:
// check if M=2,5,8
if
(
uci
->
num_pucch_resources
==
2
||
tdd_config5_sf2scheds
==
2
||
tdd_config5_sf2scheds
==
5
||
tdd_config5_sf2scheds
==
8
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
// anaake
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
...
...
@@ -2000,6 +2011,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
case
3
:
// check if M=3,6,9
if
(
uci
->
num_pucch_resources
==
3
||
tdd_config5_sf2scheds
==
3
||
tdd_config5_sf2scheds
==
6
||
tdd_config5_sf2scheds
==
9
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
// anaake
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
...
...
openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
View file @
9c820805
...
...
@@ -3426,6 +3426,7 @@ int main(int argc, char **argv)
re_allocated
=
dlsch_modulation
(
eNB
,
eNB
->
common_vars
.
txdataF
[
eNB_id
],
AMP
,
frame
,
subframe
,
num_pdcch_symbols
,
((
TB0_active
==
1
)
?
eNB
->
dlsch
[
k
][
0
]
:
NULL
),
...
...
openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
View file @
9c820805
...
...
@@ -2679,6 +2679,7 @@ PMI_FEEDBACK:
re_allocated
=
dlsch_modulation
(
eNB
,
eNB
->
common_vars
.
txdataF
[
eNB_id
],
AMP
,
frame
,
subframe
,
num_pdcch_symbols
,
eNB
->
dlsch
[
k
][
0
],
...
...
openair2/LAYER2/MAC/defs.h
View file @
9c820805
...
...
@@ -1094,9 +1094,9 @@ typedef struct eNB_MAC_INST_s {
nfapi_ul_config_request_t
UL_req_tmp
[
MAX_NUM_CCs
][
10
];
/// Preallocated HI_DCI0 pdu list
nfapi_hi_dci0_request_pdu_t
hi_dci0_pdu_list
[
MAX_NUM_CCs
][
MAX_NUM_HI_DCI0_PDU
];
hi_dci0_pdu_list
[
MAX_NUM_CCs
][
10
][
MAX_NUM_HI_DCI0_PDU
];
/// NFAPI HI/DCI0 Config Request Structure
nfapi_hi_dci0_request_t
HI_DCI0_req
[
MAX_NUM_CCs
];
nfapi_hi_dci0_request_t
HI_DCI0_req
[
MAX_NUM_CCs
]
[
10
]
;
/// Prealocated TX pdu list
nfapi_tx_request_pdu_t
tx_request_pdu
[
MAX_NUM_CCs
][
MAX_NUM_TX_REQUEST_PDU
];
...
...
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
9c820805
...
...
@@ -573,7 +573,7 @@ clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP,
{
nfapi_dl_config_request_t
*
DL_req
=
&
eNB
->
DL_req
[
0
];
nfapi_ul_config_request_t
*
UL_req
=
&
eNB
->
UL_req
[
0
];
nfapi_hi_dci0_request_t
*
HI_DCI0_req
=
&
eNB
->
HI_DCI0_req
[
0
];
nfapi_hi_dci0_request_t
*
HI_DCI0_req
=
&
eNB
->
HI_DCI0_req
[
0
]
[
subframeP
]
;
nfapi_tx_request_t
*
TX_req
=
&
eNB
->
TX_req
[
0
];
eNB
->
pdu_index
[
CC_idP
]
=
0
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA.c
View file @
9c820805
...
...
@@ -106,10 +106,10 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP,
nfapi_ul_config_request_t
*
ul_req
;
nfapi_ul_config_request_body_t
*
ul_req_body
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
;
nfapi_hi_dci0_request_t
*
hi_dci0_req
=
&
mac
->
HI_DCI0_req
[
CC_id
]
;
nfapi_hi_dci0_request_body_t
*
hi_dci0_req_body
=
&
hi_dci0_req
->
hi_dci0_request_body
;
nfapi_hi_dci0_request_t
*
hi_dci0_req
;
nfapi_hi_dci0_request_body_t
*
hi_dci0_req_body
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
;
uint8_t
sf_ahead_dl
;
uint8_t
rvseq
[
4
]
=
{
0
,
2
,
3
,
1
};
...
...
@@ -234,6 +234,9 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP,
LOG_D
(
MAC
,
"MSG3: UL_CONFIG SFN/SF:%d number_of_pdus:%d ra->msg3_round:%d
\n
"
,
NFAPI_SFNSF2DEC
(
ul_req
->
sfn_sf
),
ul_req_body
->
number_of_pdus
,
ra
->
msg3_round
);
if
(
ra
->
msg3_round
!=
0
)
{
// program HI too
sf_ahead_dl
=
ul_subframe2_k_phich
(
cc
,
subframeP
);
hi_dci0_req
=
&
mac
->
HI_DCI0_req
[
CC_id
][(
subframeP
+
sf_ahead_dl
)
%
10
];
hi_dci0_req_body
=
&
hi_dci0_req
->
hi_dci0_request_body
;
hi_dci0_pdu
=
&
hi_dci0_req_body
->
hi_dci0_pdu_list
[
hi_dci0_req_body
->
number_of_dci
+
hi_dci0_req_body
->
number_of_hi
];
memset
((
void
*
)
hi_dci0_pdu
,
0
,
sizeof
(
nfapi_hi_dci0_request_pdu_t
));
...
...
@@ -249,7 +252,7 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP,
hi_dci0_req_body
->
sfnsf
=
sfnsf_add_subframe
(
ra
->
Msg3_frame
,
ra
->
Msg3_subframe
,
0
);
hi_dci0_req_body
->
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_BODY_TAG
;
hi_dci0_req
->
sfn_sf
=
sfnsf_add_subframe
(
ra
->
Msg3_frame
,
ra
->
Msg3_subframe
,
4
);
hi_dci0_req
->
sfn_sf
=
hi_dci0_req
->
sfn_sf
=
sfnsf_add_subframe
(
frameP
,
subframeP
,
sf_ahead_dl
);
hi_dci0_req
->
header
.
message_id
=
NFAPI_HI_DCI0_REQUEST
;
if
(
nfapi_mode
)
{
...
...
@@ -307,7 +310,7 @@ generate_Msg2(module_id_t module_idP, int CC_idP, frame_t frameP,
LOG_D
(
MAC
,
"absSF:%d absSF_Msg2:%d ra->rach_resource_type:%d
\n
"
,
absSF
,
absSF_Msg2
,
ra
->
rach_resource_type
);
if
(
absSF
>
absSF_Msg2
)
if
(
absSF
<
absSF_Msg2
)
return
;
// we're not ready yet, need to be to start ==
if
(
cc
[
CC_idP
].
radioResourceConfigCommon_BR
)
{
...
...
@@ -851,7 +854,7 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
// set HARQ process round to 0 for this UE
if
(
cc
->
tdd_Config
)
ra
->
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
%
10
;
ra
->
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frameP
,
subframeP
)
;
else
ra
->
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
&
7
;
...
...
@@ -1298,10 +1301,8 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
"Frame %d, Subframe %d: Preparing for Msg4 retransmission currently %d.%d
\n
"
,
frameP
,
subframeP
,
ra
->
Msg4_frame
,
ra
->
Msg4_subframe
);
if
(
ra
->
Msg4_subframe
>
1
)
ra
->
Msg4_frame
++
;
ra
->
Msg4_frame
&=
1023
;
ra
->
Msg4_subframe
=
(
ra
->
Msg4_subframe
+
8
)
%
10
;
get_retransmission_timing
(
mac
->
common_channels
[
CC_idP
].
tdd_Config
,
&
ra
->
Msg4_frame
,
&
ra
->
Msg4_subframe
);
LOG_D
(
MAC
,
"Frame %d, Subframe %d: Msg4 retransmission in %d.%d
\n
"
,
frameP
,
subframeP
,
ra
->
Msg4_frame
,
...
...
@@ -1310,7 +1311,7 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
// put HARQ process round to 0
if
(
cc
->
tdd_Config
)
ra
->
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
%
10
;
ra
->
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frameP
,
subframeP
)
;
else
ra
->
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
&
7
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
round
[
CC_idP
][
ra
->
harq_pid
]
=
...
...
@@ -1592,10 +1593,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
dci_dl_pdu_rel8
.
cce_idx
);
// prepare frame for retransmission
if
(
ra
->
Msg4_subframe
>
1
)
ra
->
Msg4_frame
++
;
ra
->
Msg4_frame
&=
1023
;
ra
->
Msg4_subframe
=
(
ra
->
Msg4_subframe
+
8
)
%
10
;
get_retransmission_timing
(
mac
->
common_channels
[
CC_idP
].
tdd_Config
,
&
ra
->
Msg4_frame
,
&
ra
->
Msg4_subframe
);
LOG_W
(
MAC
,
"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission round %d in %d.%d)
\n
"
,
...
...
@@ -1645,7 +1643,7 @@ schedule_RA(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
if
(
ra
->
state
==
MSG2
)
generate_Msg2
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
ra
);
else
if
(
ra
->
state
==
MSG4
)
else
if
(
ra
->
state
==
MSG4
&&
ra
->
Msg4_frame
==
frameP
&&
ra
->
Msg4_subframe
==
subframeP
)
generate_Msg4
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
ra
);
else
if
(
ra
->
state
==
WAITMSG4ACK
)
check_Msg4_retransmission
(
module_idP
,
CC_id
,
frameP
,
...
...
@@ -1729,11 +1727,21 @@ initiate_ra_proc(module_id_t module_idP,
ra
[
i
].
msg4_mpdcch_repetition_cnt
=
0
;
#endif
// DJP - this is because VNF is 2 subframes ahead of PNF and TX needs 4 subframes
if
(
nfapi_mode
)
offset
=
7
;
else
offset
=
5
;
//TODO Fill in other TDD config. What about nfapi_mode?
if
(
cc
->
tdd_Config
!=
NULL
){
switch
(
cc
->
tdd_Config
->
subframeAssignment
){
case
1
:
offset
=
6
;
break
;
}
}
else
{
//FDD
// DJP - this is because VNF is 2 subframes ahead of PNF and TX needs 4 subframes
if
(
nfapi_mode
)
offset
=
7
;
else
offset
=
5
;
}
add_subframe
(
&
msg2_frame
,
&
msg2_subframe
,
offset
);
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
9c820805
...
...
@@ -499,8 +499,7 @@ schedule_ue_spec(module_id_t module_idP,
break
;
case
6
:
case
7
:
if
((
tdd_sfa
!=
1
)
&&
(
tdd_sfa
!=
2
)
&&
(
tdd_sfa
!=
4
)
&&
(
tdd_sfa
!=
5
))
if
((
tdd_sfa
!=
3
)
&&
(
tdd_sfa
!=
4
)
&&
(
tdd_sfa
!=
5
))
return
;
break
;
case
8
:
...
...
@@ -509,8 +508,7 @@ schedule_ue_spec(module_id_t module_idP,
return
;
break
;
case
9
:
if
((
tdd_sfa
!=
1
)
&&
(
tdd_sfa
!=
3
)
&&
(
tdd_sfa
!=
4
)
&&
(
tdd_sfa
!=
6
))
if
(
tdd_sfa
==
0
)
return
;
break
;
...
...
@@ -690,7 +688,7 @@ schedule_ue_spec(module_id_t module_idP,
nb_available_rb
=
ue_sched_ctl
->
pre_nb_available_rbs
[
CC_id
];
if
(
cc
->
tdd_Config
)
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
%
10
;
harq_pid
=
frame_subframe2_dl_harq_pid
(
cc
->
tdd_Config
,
frameP
,
subframeP
)
;
else
harq_pid
=
((
frameP
*
10
)
+
subframeP
)
&
7
;
...
...
@@ -758,7 +756,7 @@ schedule_ue_spec(module_id_t module_idP,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
++
;
update_ul_dci
(
module_idP
,
CC_id
,
rnti
,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
);
DAI
,
subframeP
);
LOG_D
(
MAC
,
"DAI update: CC_id %d subframeP %d: UE %d, DAI %d
\n
"
,
CC_id
,
subframeP
,
UE_id
,
...
...
@@ -1389,7 +1387,7 @@ schedule_ue_spec(module_id_t module_idP,
if
(
cc
[
CC_id
].
tdd_Config
!=
NULL
)
{
// TDD
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
++
;
update_ul_dci
(
module_idP
,
CC_id
,
rnti
,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
);
update_ul_dci
(
module_idP
,
CC_id
,
rnti
,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
,
subframeP
);
}
// do PUCCH power control
...
...
@@ -1609,7 +1607,7 @@ fill_DLSCH_dci(
// clear scheduling flag
eNB_dlsch_info
[
module_idP
][
CC_id
][
UE_id
].
status
=
S_DL_WAITING
;
rnti
=
UE_RNTI
(
module_idP
,
UE_id
);
if
(
cc
->
tdd_Config
)
harq_pid
=
((
frameP
*
10