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
3e86d30b
Commit
3e86d30b
authored
Sep 24, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some correction in RA processing for Msg4 harq handling
parent
55a9054e
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
309 additions
and
148 deletions
+309
-148
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+3
-1
openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
+1
-1
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+5
-2
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+1
-1
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+4
-6
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+19
-3
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+4
-0
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+100
-4
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+105
-98
openair2/LAYER2/MAC/extern.h
openair2/LAYER2/MAC/extern.h
+1
-1
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+31
-1
openair2/PHY_INTERFACE/IF_Module.c
openair2/PHY_INTERFACE/IF_Module.c
+35
-30
No files found.
openair1/PHY/INIT/lte_init.c
View file @
3e86d30b
...
...
@@ -1015,6 +1015,8 @@ void phy_config_harq_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
phy_vars_ue
->
ulsch
[
eNB_id
]
->
Mlimit
=
max_harq_tx
;
}
extern
uint16_t
beta_cqi
[
16
];
void
phy_config_dedicated_ue
(
uint8_t
Mod_id
,
int
CC_id
,
uint8_t
eNB_id
,
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
)
{
...
...
@@ -1070,7 +1072,7 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
LOG_D
(
PHY
,
"pusch_config_dedicated.betaOffset_ACK_Index %d
\n
"
,
phy_vars_ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_ACK_Index
);
LOG_D
(
PHY
,
"pusch_config_dedicated.betaOffset_RI_Index %d
\n
"
,
phy_vars_ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_RI_Index
);
LOG_D
(
PHY
,
"pusch_config_dedicated.betaOffset_CQI_Index %d
\n
"
,
phy_vars_ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
);
LOG_D
(
PHY
,
"pusch_config_dedicated.betaOffset_CQI_Index %d
=> %d)
\n
"
,
phy_vars_ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
,
beta_cqi
[
phy_vars_ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
]
);
LOG_D
(
PHY
,
"
\n
"
);
...
...
openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
View file @
3e86d30b
...
...
@@ -239,7 +239,7 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
max_pos_fil2
=
((
max_pos_fil2
*
coef
)
+
(
max_pos
*
ncoef
))
>>
15
;
//#ifdef DEBUG_PHY
LOG_
I
(
PHY
,
"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d
\n
"
,
eNB
->
proc
.
frame_rx
,
max_pos
,
max_pos_fil2
,
sync_pos
);
LOG_
D
(
PHY
,
"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d
\n
"
,
eNB
->
proc
.
frame_rx
,
max_pos
,
max_pos_fil2
,
sync_pos
);
//#endif //DEBUG_PHY
return
(
max_pos_fil2
-
sync_pos
);
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
3e86d30b
...
...
@@ -7680,6 +7680,9 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
ulsch->harq_processes[harq_pid]->subframe_scheduling_flag,
ulsch->bundling,
ulsch->harq_processes[harq_pid]->O_ACK);*/
LOG_D
(
PHY
,
"Setting beta_offset_cqi_times8 to %d, index %d
\n
"
,
beta_cqi
[
ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
],
ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
);
ulsch
->
beta_offset_cqi_times8
=
beta_cqi
[
ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_CQI_Index
];
//18;
ulsch
->
beta_offset_ri_times8
=
beta_ri
[
ue
->
pusch_config_dedicated
[
eNB_id
].
betaOffset_RI_Index
];
//10;
...
...
@@ -7724,10 +7727,10 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
if
(
ue
->
ulsch_Msg3_active
[
eNB_id
]
==
1
)
ue
->
ulsch_Msg3_active
[
eNB_id
]
=
0
;
LOG_D
(
PHY
,
"[UE %d][PUSCH %d] Frame %d, subframe %d : Programming PUSCH with n_DMRS2 %d (cshift %d), nb_rb %d, first_rb %d, mcs %d, round %d, rv %d, ulsch_ue_Msg3_active %d
\n
"
,
LOG_D
(
PHY
,
"[UE %d][PUSCH %d] Frame %d, subframe %d : Programming PUSCH with n_DMRS2 %d (cshift %d), nb_rb %d, first_rb %d, mcs %d, round %d, rv %d, ulsch_ue_Msg3_active %d
, cqi_req %d => O %d
\n
"
,
ue
->
Mod_id
,
harq_pid
,
proc
->
frame_rx
,
subframe
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
,
cshift
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
,
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
ue
->
ulsch_Msg3_active
[
eNB_id
]
);
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
,
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
ue
->
ulsch_Msg3_active
[
eNB_id
],
cqi_req
,
ulsch
->
O
);
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
3e86d30b
...
...
@@ -1722,7 +1722,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB,
uint8_t
use_srs
);
void
dump_ulsch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
eNB_rxtx_proc_t
*
proc
,
uint8_t
UE_id
);
void
dump_ulsch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int
frame
,
int
subframe
,
uint8_t
UE_id
);
int
dump_dci
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
DCI_ALLOC_t
*
dci
);
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
3e86d30b
...
...
@@ -1329,23 +1329,21 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
}
void
dump_ulsch
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
uint8_t
UE_id
)
{
void
dump_ulsch
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
uint8_t
UE_id
)
{
uint32_t
nsymb
=
(
eNB
->
frame_parms
.
Ncp
==
0
)
?
14
:
12
;
uint8_t
harq_pid
;
int
subframe
=
proc
->
subframe_rx
;
harq_pid
=
subframe2harq_pid
(
&
eNB
->
frame_parms
,
proc
->
frame_rx
,
subframe
);
harq_pid
=
subframe2harq_pid
(
&
eNB
->
frame_parms
,
frame
,
subframe
);
printf
(
"Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, TBS %d, Qm %d, N_symb %d
\n
"
,
subframe
,
harq_pid
,
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
printf
(
"Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, TBS %d, Qm %d, N_symb %d
\n
"
,
subframe
,
harq_pid
,
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
TBS
,
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
Qm
,
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
);
//#ifndef OAI_EMU
write_output
(
"/tmp/ulsch_d.m"
,
"ulsch_dseq"
,
&
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
d
[
0
][
96
],
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
Kplus
*
3
,
1
,
0
);
if
(
eNB
->
common_vars
.
rxdata
)
write_output
(
"/tmp/rxsig0.m"
,
"rxs0"
,
&
eNB
->
common_vars
.
rxdata
[
0
][
0
],
eNB
->
frame_parms
.
samples_per_tti
*
10
,
1
,
1
);
if
(
eNB
->
frame_parms
.
nb_antennas_rx
>
1
)
if
(
eNB
->
common_vars
.
rxdata
)
write_output
(
"/tmp/rxsig1.m"
,
"rxs1"
,
&
eNB
->
common_vars
.
rxdata
[
1
][
0
],
eNB
->
frame_parms
.
samples_per_tti
*
10
,
1
,
1
);
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
3e86d30b
...
...
@@ -1309,7 +1309,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
nPRS
)
%
12
;
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d
\n
"
,
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d
, beta_cqi %d
\n
"
,
eNB
->
Mod_id
,
harq_pid
,
frame
,
subframe
,
ulsch_harq
->
dci_alloc
,
ulsch_harq
->
rar_alloc
,
...
...
@@ -1323,7 +1323,8 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
ulsch_harq
->
n_DMRS2
,
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
,
nPRS
,
ulsch_harq
->
O_ACK
);
ulsch_harq
->
O_ACK
,
ulsch
->
beta_offset_cqi_times8
);
start_meas
(
&
eNB
->
ulsch_demodulation_stats
);
...
...
@@ -1380,6 +1381,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
T_INT
(
harq_pid
));
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
1
);
// indicate NAK to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)
\n
"
,
eNB
->
Mod_id
,
harq_pid
,
...
...
@@ -1389,6 +1391,10 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
ulsch_harq
->
o_ACK
[
0
],
ulsch_harq
->
o_ACK
[
1
]);
if
(
dB_fixed_times10
(
eNB
->
pusch_vars
[
i
]
->
ulsch_power
[
0
])
>
300
)
{
dump_ulsch
(
eNB
,
frame
,
subframe
,
i
);
exit
(
-
1
);
}
#if defined(MESSAGE_CHART_GENERATOR_PHY)
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_PHY_ENB
,
MSC_PHY_UE
,
...
...
@@ -1405,7 +1411,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
0
);
// indicate ACK to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
T
(
T_ENB_PHY_ULSCH_UE_ACK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
i
),
T_INT
(
ulsch
->
rnti
),
T_INT
(
harq_pid
));
ulsch_harq
->
status
=
SCH_IDLE
;
...
...
@@ -1516,6 +1522,10 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe) {
// estimate timing advance for MAC
sync_pos
=
lte_est_timing_advance_pusch
(
eNB
,
UE_id
);
timing_advance_update
=
sync_pos
-
eNB
->
frame_parms
.
nb_prefix_samples
/
4
;
//to check
// if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
// if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
pdu
->
rx_indication_rel8
.
timing_advance
=
timing_advance_update
;
...
...
@@ -1544,10 +1554,16 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe) {
// estimate UL_CQI for MAC (from antenna port 0 only)
int
SNRtimes10
=
dB_fixed_times10
(
eNB
->
pusch_vars
[
UE_id
]
->
ulsch_power
[
0
])
-
200
;
//(10*eNB->measurements.n0_power_dB[0]);
if
(
SNRtimes10
<
-
640
)
pdu
->
rx_indication_rel8
.
ul_cqi
=
0
;
else
if
(
SNRtimes10
>
635
)
pdu
->
rx_indication_rel8
.
ul_cqi
=
255
;
else
pdu
->
rx_indication_rel8
.
ul_cqi
=
(
640
+
SNRtimes10
)
/
5
;
LOG_D
(
PHY
,
"[PUSCH %d] Filling RX_indication with SNR %d (%d), timing_advance %d (update %d)
\n
"
,
harq_pid
,
SNRtimes10
,
pdu
->
rx_indication_rel8
.
ul_cqi
,
pdu
->
rx_indication_rel8
.
timing_advance
,
timing_advance_update
);
eNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
++
;
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
...
...
openair2/LAYER2/MAC/defs.h
View file @
3e86d30b
...
...
@@ -648,6 +648,10 @@ typedef struct {
uint8_t
oldmcs2
[
8
];
/// NDI from last UL scheduling
uint8_t
oldNDI_UL
[
8
];
/// mcs from last UL scheduling
uint8_t
mcs_UL
[
8
];
/// TBS from last UL scheduling
uint8_t
TBS_UL
[
8
];
/// Flag to indicate UL has been scheduled at least once
boolean_t
ul_active
;
/// Flag to indicate UE has been configured (ACK from RRCConnectionSetup received)
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
3e86d30b
...
...
@@ -777,12 +777,12 @@ void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_ReportP
}
uint8_t
get_dl_cqi_pmi_size_pusch
(
UE_sched_ctrl
*
sched_ctl
,
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
)
{
uint8_t
get_dl_cqi_pmi_size_pusch
(
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
)
{
int
Ntab
[
6
]
=
{
0
,
4
,
7
,
9
,
10
,
13
};
int
N
=
Ntab
[
cc
->
p_eNB
];
int
N
=
Ntab
[
cc
->
mib
->
message
.
dl_Bandwidth
];
int
Ltab_uesel
[
6
]
=
{
0
,
6
,
9
,
13
,
15
,
18
};
int
L
=
Ltab_uesel
[
cc
->
p_eNB
];
int
L
=
Ltab_uesel
[
cc
->
mib
->
message
.
dl_Bandwidth
];
AssertFatal
(
cqi_ReportModeAperiodic
!=
NULL
,
"cqi_ReportPeriodic is null!
\n
"
);
...
...
@@ -1307,7 +1307,103 @@ uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,u
return
(((
absSF
/
10
)
<<
4
)
+
(
absSF
%
10
));
}
void
fill_nfapi_ulsch_config_request_rel8
(
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint8_t
cqi_req
,
COMMON_channels_t
*
cc
,
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
,
uint8_t
tmode
,
uint32_t
handle
,
uint16_t
rnti
,
uint8_t
resource_block_start
,
uint8_t
number_of_resource_blocks
,
uint8_t
mcs
,
uint8_t
cyclic_shift_2_for_drms
,
uint8_t
frequency_hopping_enabled_flag
,
uint8_t
frequency_hopping_bits
,
uint8_t
new_data_indication
,
uint8_t
redundancy_version
,
uint8_t
harq_process_number
,
uint8_t
ul_tx_mode
,
uint8_t
current_tx_nb
,
uint8_t
n_srs
,
uint16_t
size
)
{
memset
((
void
*
)
ul_config_pdu
,
0
,
sizeof
(
nfapi_ul_config_request_pdu_t
));
if
(
cqi_req
==
0
)
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
;
else
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_ulsch_pdu
));
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
handle
=
handle
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
=
rnti
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
resource_block_start
=
resource_block_start
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
number_of_resource_blocks
=
number_of_resource_blocks
;
if
(
mcs
<
11
)
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
modulation_type
=
2
;
else
if
(
mcs
<
21
)
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
modulation_type
=
4
;
else
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
modulation_type
=
6
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
cyclic_shift_2_for_drms
=
cyclic_shift_2_for_drms
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
frequency_hopping_enabled_flag
=
frequency_hopping_enabled_flag
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
frequency_hopping_bits
=
frequency_hopping_bits
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
new_data_indication
=
new_data_indication
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
redundancy_version
=
redundancy_version
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
harq_process_number
=
harq_process_number
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
ul_tx_mode
=
ul_tx_mode
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
current_tx_nb
=
current_tx_nb
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
n_srs
=
n_srs
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
size
=
size
;
if
(
cqi_req
==
1
)
{
// Add CQI portion
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_ulsch_cqi_ri_pdu
));
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
report_type
=
1
;
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
number_of_cc
=
1
;
LOG_D
(
MAC
,
"report_type %d
\n
"
,
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
report_type
);
if
(
cc
->
p_eNB
<=
2
&&
(
tmode
==
3
||
tmode
==
4
||
tmode
==
8
||
tmode
==
9
||
tmode
==
10
))
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
=
1
;
else
if
(
cc
->
p_eNB
<=
2
)
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
=
0
;
else
if
(
cc
->
p_eNB
==
4
)
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
=
2
;
AssertFatal
(
physicalConfigDedicated
->
cqi_ReportConfig
!=
NULL
,
"physicalConfigDedicated->cqi_ReportConfig is null!
\n
"
);
AssertFatal
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
!=
NULL
,
"physicalConfigDedicated->cqi_ReportModeAperiodic is null!
\n
"
);
AssertFatal
(
physicalConfigDedicated
->
pusch_ConfigDedicated
!=
NULL
,
"physicalConfigDedicated->puschConfigDedicated is null!
\n
"
);
for
(
int
ri
=
0
;
ri
<
(
1
<<
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
);
ri
++
)
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
ri
]
=
get_dl_cqi_pmi_size_pusch
(
cc
,
tmode
,
1
+
ri
,
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
);
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
delta_offset_cqi
=
physicalConfigDedicated
->
pusch_ConfigDedicated
->
betaOffset_CQI_Index
;
((
nfapi_ul_config_ulsch_cqi_ri_pdu
*
)
ul_config_pdu
)
->
cqi_ri_information
.
cqi_ri_information_rel9
.
delta_offset_ri
=
physicalConfigDedicated
->
pusch_ConfigDedicated
->
betaOffset_RI_Index
;
}
}
#ifdef Rel14
void
fill_nfapi_ulsch_config_request_emtc
(
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint8_t
ue_type
,
uint16_t
total_number_of_repetitions
,
uint16_t
repetition_number
,
uint16_t
initial_transmission_sf_io
)
{
// Re13 fields
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
ue_type
=
ue_type
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
total_number_of_repetitions
=
total_number_of_repetitions
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
repetition_number
=
repetition_number
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
initial_transmission_sf_io
=
initial_transmission_sf_io
;
}
int
get_numnarrowbands
(
long
dl_Bandwidth
)
{
int
nb_tab
[
6
]
=
{
1
,
2
,
4
,
8
,
12
,
16
};
...
...
@@ -3288,7 +3384,7 @@ void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
AssertFatal
((
cqi_ReportModeAperiodic
=
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
!=
NULL
,
"cqi_ReportModeAperiodic is null for UE %d
\n
"
,
UE_id
);
int
N
=
Ntab
[
cc
->
p_eNB
];
int
N
=
Ntab
[
cc
->
mib
->
message
.
dl_Bandwidth
];
int
tmode
=
get_tmode
(
mod_idP
,
CC_idP
,
UE_id
);
int
ri
=
sched_ctl
->
aperiodic_ri_received
[
CC_idP
];
int
r
,
diffcqi0
=
0
,
diffcqi1
=
0
,
pmi_uesel
=
0
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
3e86d30b
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/extern.h
View file @
3e86d30b
...
...
@@ -77,7 +77,7 @@ extern int cqi_to_mcs[16];
extern
uint32_t
RRC_CONNECTION_FLAG
;
extern
uint8_t
rb_table
[
3
3
];
extern
uint8_t
rb_table
[
3
4
];
extern
DCI0_5MHz_TDD_1_6_t
UL_alloc_pdu
;
...
...
openair2/LAYER2/MAC/proto.h
View file @
3e86d30b
...
...
@@ -945,13 +945,43 @@ void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_PMI_Con
uint8_t
get_rel8_dl_cqi_pmi_size
(
UE_sched_ctrl
*
sched_ctl
,
int
CC_idP
,
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
);
uint8_t
get_dl_cqi_pmi_size_pusch
(
UE_sched_ctrl
*
sched_ctl
,
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
);
uint8_t
get_dl_cqi_pmi_size_pusch
(
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
);
void
extract_pucch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
);
void
extract_pusch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
);
uint16_t
fill_nfapi_tx_req
(
nfapi_tx_request_body_t
*
tx_req_body
,
uint16_t
absSF
,
uint16_t
pdu_length
,
uint16_t
*
pdu_index
,
uint8_t
*
pdu
);
void
fill_nfapi_ulsch_config_request_rel8
(
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint8_t
cqi_req
,
COMMON_channels_t
*
cc
,
struct
PhysicalConfigDedicated
*
physicalConfigDedicated
,
uint8_t
tmode
,
uint32_t
handle
,
uint16_t
rnti
,
uint8_t
resource_block_start
,
uint8_t
number_of_resource_blocks
,
uint8_t
mcs
,
uint8_t
cyclic_shift_2_for_drms
,
uint8_t
frequency_hopping_enabled_flag
,
uint8_t
frequency_hopping_bits
,
uint8_t
new_data_indication
,
uint8_t
redundancy_version
,
uint8_t
harq_process_number
,
uint8_t
ul_tx_mode
,
uint8_t
current_tx_nb
,
uint8_t
n_srs
,
uint16_t
size
);
#ifdef Rel14
void
fill_nfapi_ulsch_config_request_emtc
(
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint8_t
ue_type
,
uint16_t
total_number_of_repetitions
,
uint16_t
repetition_number
,
uint16_t
initial_transmission_sf_io
);
#endif
void
program_dlsch_acknak
(
module_id_t
module_idP
,
int
CC_idP
,
int
UE_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
cce_idx
);
void
fill_nfapi_dlsch_config
(
eNB_MAC_INST
*
eNB
,
nfapi_dl_config_request_body_t
*
dl_req
,
...
...
openair2/PHY_INTERFACE/IF_Module.c
View file @
3e86d30b
...
...
@@ -102,41 +102,46 @@ void handle_harq(UL_IND_t *UL_info) {
void
handle_ulsch
(
UL_IND_t
*
UL_info
)
{
int
i
;
int
i
,
j
;
for
(
i
=
0
;
i
<
UL_info
->
rx_ind
.
number_of_pdus
;
i
++
)
{
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
UL_info
->
frame
,
UL_info
->
subframe
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
data
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
length
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
timing_advance
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
ul_cqi
);
}
for
(
j
=
0
;
j
<
UL_info
->
crc_ind
.
number_of_crcs
;
j
++
)
{
// find crc_indication j corresponding rx_indication i
if
(
UL_info
->
crc_ind
.
crc_pdu_list
[
j
].
rx_ue_information
.
rnti
==
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
)
{
if
(
UL_info
->
crc_ind
.
crc_pdu_list
[
j
].
crc_indication_rel8
.
crc_flag
==
1
)
{
// CRC error indication
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu (CRC error)
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
UL_info
->
frame
,
UL_info
->
subframe
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
,
(
uint8_t
*
)
NULL
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
length
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
timing_advance
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
ul_cqi
);
}
else
{
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu (CRC ok)
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
UL_info
->
frame
,
UL_info
->
subframe
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_ue_information
.
rnti
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
data
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
length
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
timing_advance
,
UL_info
->
rx_ind
.
rx_pdu_list
[
i
].
rx_indication_rel8
.
ul_cqi
);
}
break
;
}
//if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
// UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti) {
}
// for (j=0;j<UL_info->crc_ind.number_of_crcs;j++) {
AssertFatal
(
j
<
UL_info
->
crc_ind
.
number_of_crcs
,
"Couldn't find matchin CRC indication
\n
"
);
}
// for (i=0;i<UL_info->rx_ind.number_of_pdus;i++) {
UL_info
->
rx_ind
.
number_of_pdus
=
0
;
for
(
i
=
0
;
i
<
UL_info
->
crc_ind
.
number_of_crcs
;
i
++
)
{
if
(
UL_info
->
crc_ind
.
crc_pdu_list
[
i
].
crc_indication_rel8
.
crc_flag
==
1
)
{
// CRC error indication
LOG_D
(
MAC
,
"Frame %d, Subframe %d Calling rx_sdu (CRC error)
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
);
rx_sdu
(
UL_info
->
module_id
,
UL_info
->
CC_id
,
UL_info
->
frame
,
UL_info
->
subframe
,
UL_info
->
crc_ind
.
crc_pdu_list
[
i
].
rx_ue_information
.
rnti
,
(
uint8_t
*
)
NULL
,
0
,
0
,
0
);
}
}
UL_info
->
crc_ind
.
number_of_crcs
=
0
;
}
...
...
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