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
Michael Black
OpenXG-RAN
Commits
46d08aed
Commit
46d08aed
authored
Jul 16, 2018
by
tct-labo4
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop-nr' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop-nr
parents
d978b6d2
3e32b94f
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
206 additions
and
1191 deletions
+206
-1191
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+6
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+2
-0
openair1/SCHED_NR_UE/fapi_l1.c
openair1/SCHED_NR_UE/fapi_l1.c
+0
-863
openair1/SCHED_NR_UE/fapi_l1.h
openair1/SCHED_NR_UE/fapi_l1.h
+0
-79
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+4
-4
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
+4
-4
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+8
-6
openair2/LAYER2/NR_MAC_UE/extern.h
openair2/LAYER2/NR_MAC_UE/extern.h
+0
-125
openair2/LAYER2/NR_MAC_UE/mac.h
openair2/LAYER2/NR_MAC_UE/mac.h
+9
-13
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+9
-13
openair2/LAYER2/NR_MAC_UE/mac_vars.c
openair2/LAYER2/NR_MAC_UE/mac_vars.c
+10
-9
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+8
-7
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+9
-7
openair2/LAYER2/NR_MAC_UE/proto.h
openair2/LAYER2/NR_MAC_UE/proto.h
+9
-5
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+5
-5
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+11
-10
openair2/RRC/NR_UE/L2_interface_ue.c
openair2/RRC/NR_UE/L2_interface_ue.c
+8
-6
openair2/RRC/NR_UE/main_ue.c
openair2/RRC/NR_UE/main_ue.c
+30
-0
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+9
-7
openair2/RRC/NR_UE/rrc_defs.h
openair2/RRC/NR_UE/rrc_defs.h
+10
-8
openair2/RRC/NR_UE/rrc_list.h
openair2/RRC/NR_UE/rrc_list.h
+32
-0
openair2/RRC/NR_UE/rrc_proto.h
openair2/RRC/NR_UE/rrc_proto.h
+9
-9
openair2/RRC/NR_UE/rrc_vars.h
openair2/RRC/NR_UE/rrc_vars.h
+10
-8
targets/RT/USER/nr-ue.c
targets/RT/USER/nr-ue.c
+4
-1
No files found.
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
46d08aed
...
...
@@ -67,8 +67,12 @@ typedef struct {
#define FAPI_NR_TAG_LENGTH_PACKED_LEN 4
typedef
struct
{
fapi_nr_tl_t
tl
;
// common C-RNTI
// config
uint8_t
cce_idx
;
uint8_t
aggregation_level
;
uint16_t
rnti
;
// dci pdu
uint8_t
dci_format
;
uint8_t
frequency_domain_resouce_assignment
;
// 38.214 chapter 5.1.2.2
uint8_t
time_domain_resource_assignment
;
// 38.214 chapter 5.1.2.1
...
...
openair1/PHY/defs_nr_UE.h
View file @
46d08aed
...
...
@@ -991,6 +991,8 @@ typedef struct {
NR_DL_FRAME_PARMS
frame_parms_before_ho
;
NR_UE_COMMON
common_vars
;
nr_ue_if_module_t
*
if_inst
;
// point to the current rxTx thread index
uint8_t
current_thread_id
[
10
];
...
...
openair1/SCHED_NR_UE/fapi_l1.c
deleted
100644 → 0
View file @
d978b6d2
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file fapi_l1.c
* \brief functions for FAPI L1 interface
* \author R. Knopp
* \date 2017
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \note
* \warning
*/
#include "PHY/defs_eNB.h"
#include "PHY/LTE_TRANSPORT/transport_proto.h"
#include "SCHED/sched_eNB.h"
#include "nfapi_interface.h"
#include "fapi_l1.h"
int
oai_nfapi_dl_config_req
(
nfapi_dl_config_request_t
*
dl_config_req
);
int
oai_nfapi_tx_req
(
nfapi_tx_request_t
*
tx_req
);
int
oai_nfapi_hi_dci0_req
(
nfapi_hi_dci0_request_t
*
hi_dci0_req
);
int
oai_nfapi_ul_config_req
(
nfapi_ul_config_request_t
*
ul_config_req
);
extern
uint8_t
nfapi_mode
;
void
handle_nfapi_dci_dl_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
)
{
int
idx
=
subframe
&
1
;
LTE_eNB_PDCCH
*
pdcch_vars
=
&
eNB
->
pdcch_vars
[
idx
];
nfapi_dl_config_dci_dl_pdu
*
pdu
=
&
dl_config_pdu
->
dci_dl_pdu
;
LOG_D
(
PHY
,
"Frame %d, Subframe %d: DCI processing - populating pdcch_vars->dci_alloc[%d] proc:subframe_tx:%d idx:%d pdcch_vars->num_dci:%d
\n
"
,
frame
,
subframe
,
pdcch_vars
->
num_dci
,
proc
->
subframe_tx
,
idx
,
pdcch_vars
->
num_dci
);
// copy dci configuration into eNB structure
fill_dci_and_dlsch
(
eNB
,
frame
,
subframe
,
proc
,
&
pdcch_vars
->
dci_alloc
[
pdcch_vars
->
num_dci
],
pdu
);
LOG_D
(
PHY
,
"Frame %d, Subframe %d: DCI processing - populated pdcch_vars->dci_alloc[%d] proc:subframe_tx:%d idx:%d pdcch_vars->num_dci:%d
\n
"
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
pdcch_vars
->
num_dci
,
proc
->
subframe_tx
,
idx
,
pdcch_vars
->
num_dci
);
}
#ifdef Rel14
void
handle_nfapi_mpdcch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
)
{
int
idx
=
proc
->
subframe_tx
&
1
;
LTE_eNB_MPDCCH
*
mpdcch_vars
=
&
eNB
->
mpdcch_vars
[
idx
];
nfapi_dl_config_mpdcch_pdu
*
pdu
=
&
dl_config_pdu
->
mpdcch_pdu
;
LOG_D
(
PHY
,
"Frame %d, Subframe %d: MDCI processing
\n
"
,
proc
->
frame_tx
,
proc
->
subframe_tx
);
// copy dci configuration into eNB structure
fill_mdci_and_dlsch
(
eNB
,
proc
,
&
mpdcch_vars
->
mdci_alloc
[
mpdcch_vars
->
num_dci
],
pdu
);
}
#endif
void
handle_nfapi_hi_dci0_dci_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
)
{
int
idx
=
subframe
&
1
;
LTE_eNB_PDCCH
*
pdcch_vars
=
&
eNB
->
pdcch_vars
[
idx
];
//LOG_D(PHY,"%s() SFN/SF:%04d%d Before num_dci:%d\n", __FUNCTION__,frame,subframe,pdcch_vars->num_dci);
// copy dci configuration in to eNB structure
fill_dci0
(
eNB
,
frame
,
subframe
,
proc
,
&
pdcch_vars
->
dci_alloc
[
pdcch_vars
->
num_dci
],
&
hi_dci0_config_pdu
->
dci_pdu
);
}
void
handle_nfapi_hi_dci0_hi_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
)
{
LTE_eNB_PHICH
*
phich
=
&
eNB
->
phich_vars
[
subframe
&
1
];
// copy dci configuration in to eNB structure
LOG_D
(
PHY
,
"Received HI PDU with value %d (rbstart %d,cshift %d)
\n
"
,
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
hi_value
,
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
resource_block_start
,
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
cyclic_shift_2_for_drms
);
// DJP - TODO FIXME - transmission power ignored
phich
->
config
[
phich
->
num_hi
].
hi
=
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
hi_value
;
phich
->
config
[
phich
->
num_hi
].
first_rb
=
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
resource_block_start
;
phich
->
config
[
phich
->
num_hi
].
n_DMRS
=
hi_dci0_config_pdu
->
hi_pdu
.
hi_pdu_rel8
.
cyclic_shift_2_for_drms
;
phich
->
num_hi
++
;
AssertFatal
(
phich
->
num_hi
<
32
,
"Maximum number of phich reached in subframe
\n
"
);
}
void
handle_nfapi_bch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
,
uint8_t
*
sdu
)
{
nfapi_dl_config_bch_pdu_rel8_t
*
rel8
=
&
dl_config_pdu
->
bch_pdu
.
bch_pdu_rel8
;
AssertFatal
(
rel8
->
length
==
3
,
"BCH PDU has length %d != 3
\n
"
,
rel8
->
length
);
//LOG_D(PHY,"bch_pdu: %x,%x,%x\n",sdu[0],sdu[1],sdu[2]);
eNB
->
pbch_pdu
[
0
]
=
sdu
[
2
];
eNB
->
pbch_pdu
[
1
]
=
sdu
[
1
];
eNB
->
pbch_pdu
[
2
]
=
sdu
[
0
];
// adjust transmit amplitude here based on NFAPI info
}
#ifdef Rel14
extern
uint32_t
localRIV2alloc_LUT6
[
32
];
extern
uint32_t
localRIV2alloc_LUT25
[
512
];
extern
uint32_t
localRIV2alloc_LUT50_0
[
1600
];
extern
uint32_t
localRIV2alloc_LUT50_1
[
1600
];
extern
uint32_t
localRIV2alloc_LUT100_0
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_1
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_2
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_3
[
6000
];
#endif
void
handle_nfapi_dlsch_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
,
uint8_t
codeword_index
,
uint8_t
*
sdu
)
{
nfapi_dl_config_dlsch_pdu_rel8_t
*
rel8
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
;
#ifndef Rel8
nfapi_dl_config_dlsch_pdu_rel10_t
*
rel10
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel10
;
#endif
#ifdef Rel14
nfapi_dl_config_dlsch_pdu_rel13_t
*
rel13
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel13
;
#endif
LTE_eNB_DLSCH_t
*
dlsch0
=
NULL
,
*
dlsch1
=
NULL
;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
,
*
dlsch1_harq
=
NULL
;
int
UE_id
;
int
harq_pid
;
UE_id
=
find_dlsch
(
rel8
->
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
);
AssertFatal
(
UE_id
!=-
1
,
"no free or exiting dlsch_context
\n
"
);
AssertFatal
(
UE_id
<
NUMBER_OF_UE_MAX
,
"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)
\n
"
,
UE_id
,
NUMBER_OF_UE_MAX
);
dlsch0
=
eNB
->
dlsch
[
UE_id
][
0
];
dlsch1
=
eNB
->
dlsch
[
UE_id
][
1
];
#ifdef Rel14
if
((
rel13
->
pdsch_payload_type
<
2
)
&&
(
rel13
->
ue_type
>
0
))
dlsch0
->
harq_ids
[
subframe
]
=
0
;
#endif
harq_pid
=
dlsch0
->
harq_ids
[
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
=
dlsch0
->
harq_processes
[
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
AssertFatal
(
dlsch0_harq
!=
NULL
,
"dlsch_harq is null
\n
"
);
// compute DL power control parameters
eNB
->
pdsch_config_dedicated
[
UE_id
].
p_a
=
rel8
->
pa
;
if
(
dlsch0
->
active
){
computeRhoA_eNB
(
rel8
->
pa
,
dlsch0
,
dlsch0_harq
->
dl_power_off
,
eNB
->
frame_parms
.
nb_antenna_ports_eNB
);
computeRhoB_eNB
(
rel8
->
pa
,
eNB
->
frame_parms
.
pdsch_config_common
.
p_b
,
eNB
->
frame_parms
.
nb_antenna_ports_eNB
,
dlsch0
,
dlsch0_harq
->
dl_power_off
);
}
if
(
dlsch1
->
active
){
computeRhoA_eNB
(
rel8
->
pa
,
dlsch1
,
dlsch1_harq
->
dl_power_off
,
eNB
->
frame_parms
.
nb_antenna_ports_eNB
);
computeRhoB_eNB
(
rel8
->
pa
,
eNB
->
frame_parms
.
pdsch_config_common
.
p_b
,
eNB
->
frame_parms
.
nb_antenna_ports_eNB
,
dlsch1
,
dlsch1_harq
->
dl_power_off
);
}
dlsch0_harq
->
pdsch_start
=
eNB
->
pdcch_vars
[
subframe
&
1
].
num_pdcch_symbols
;
if
(
dlsch0_harq
->
round
==
0
)
{
//get pointer to SDU if this a new SDU
AssertFatal
(
sdu
!=
NULL
,
"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]
\n
"
,
frame
,
subframe
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
rel8
->
rnti
,
UE_id
,
harq_pid
,
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
pdu_index
,
dlsch0_harq
->
round
,
dlsch0_harq
->
frame
,
dlsch0_harq
->
subframe
,
dlsch0_harq
->
pdu
,
dlsch0_harq
->
mcs
,
dlsch0_harq
->
ndi
,
dlsch0_harq
->
pdsch_start
);
if
(
rel8
->
rnti
!=
0xFFFF
)
LOG_D
(
PHY
,
"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d, subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d
\n
"
,
frame
,
subframe
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
rel8
->
rnti
,
UE_id
,
harq_pid
);
if
(
codeword_index
==
0
)
dlsch0_harq
->
pdu
=
sdu
;
else
dlsch1_harq
->
pdu
=
sdu
;
}
else
{
if
(
rel8
->
rnti
!=
0xFFFF
)
LOG_D
(
PHY
,
"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d, subframe %d]: programming dlsch for round %d, rnti %x, UE_id %d, harq_pid %d
\n
"
,
frame
,
subframe
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
dlsch0_harq
->
round
,
rel8
->
rnti
,
UE_id
,
harq_pid
);
}
#ifdef Rel14
dlsch0
->
sib1_br_flag
=
0
;
if
((
rel13
->
pdsch_payload_type
<
2
)
&&
(
rel13
->
ue_type
>
0
))
{
// this is a BR/CE UE and SIB1-BR/SI-BR
dlsch0
->
rnti
=
0xFFFF
;
dlsch0
->
Kmimo
=
1
;
dlsch0
->
Mdlharq
=
4
;
dlsch0
->
Nsoft
=
25344
;
if
(
rel13
->
pdsch_payload_type
==
0
)
dlsch0
->
sib1_br_flag
=
1
;
// configure PDSCH
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT6
[
rel8
->
resource_block_coding
];
break
;
case
15
:
AssertFatal
(
1
==
0
,
"15 PRBs not supported for now
\n
"
);
break
;
case
25
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT25
[
rel8
->
resource_block_coding
];
break
;
case
50
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT50_0
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
1
]
=
localRIV2alloc_LUT50_1
[
rel8
->
resource_block_coding
];
break
;
case
75
:
AssertFatal
(
1
==
0
,
"75 PRBs not supported for now
\n
"
);
break
;
case
100
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT100_0
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
1
]
=
localRIV2alloc_LUT100_1
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
2
]
=
localRIV2alloc_LUT100_2
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
3
]
=
localRIV2alloc_LUT100_3
[
rel8
->
resource_block_coding
];
}
dlsch0
->
active
=
1
;
dlsch0_harq
->
nb_rb
=
6
;
dlsch0_harq
->
vrb_type
=
LOCALIZED
;
dlsch0_harq
->
rvidx
=
rel8
->
redundancy_version
;
dlsch0_harq
->
Nl
=
1
;
dlsch0_harq
->
mimo_mode
=
(
eNB
->
frame_parms
.
nb_antenna_ports_eNB
==
1
)
?
SISO
:
ALAMOUTI
;
dlsch0_harq
->
dl_power_off
=
1
;
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
status
=
ACTIVE
;
dlsch0_harq
->
TBS
=
rel8
->
length
<<
3
;
dlsch0_harq
->
Qm
=
rel8
->
modulation
;
dlsch0_harq
->
codeword
=
0
;
dlsch0_harq
->
pdsch_start
=
rel10
->
pdsch_start
;
}
dlsch0
->
i0
=
rel13
->
initial_transmission_sf_io
;
#endif
#ifdef Rel14
LOG_D
(
PHY
,
"dlsch->i0:%04x dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]
\n
"
,
dlsch0
->
i0
,
dlsch0_harq
->
pdsch_start
,
dlsch0_harq
->
nb_rb
,
dlsch0_harq
->
vrb_type
,
dlsch0_harq
->
rvidx
,
dlsch0_harq
->
Nl
,
dlsch0_harq
->
mimo_mode
,
dlsch0_harq
->
dl_power_off
,
dlsch0_harq
->
round
,
dlsch0_harq
->
status
,
dlsch0_harq
->
TBS
,
dlsch0_harq
->
Qm
,
dlsch0_harq
->
codeword
,
dlsch0_harq
->
rb_alloc
[
0
],
rel8
->
length
);
#else
LOG_D
(
PHY
,
"dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]
\n
"
,
dlsch0_harq
->
pdsch_start
,
dlsch0_harq
->
nb_rb
,
dlsch0_harq
->
vrb_type
,
dlsch0_harq
->
rvidx
,
dlsch0_harq
->
Nl
,
dlsch0_harq
->
mimo_mode
,
dlsch0_harq
->
dl_power_off
,
dlsch0_harq
->
round
,
dlsch0_harq
->
status
,
dlsch0_harq
->
TBS
,
dlsch0_harq
->
Qm
,
dlsch0_harq
->
codeword
,
dlsch0_harq
->
rb_alloc
[
0
],
rel8
->
length
);
#endif
}
uint16_t
to_beta_offset_harqack
[
16
]
=
{
16
,
20
,
25
,
32
,
40
,
50
,
64
,
80
,
101
,
127
,
160
,
248
,
400
,
640
,
1008
,
8
};
void
handle_ulsch_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
nfapi_ul_config_ulsch_harq_information
*
harq_information
,
uint16_t
frame
,
uint8_t
subframe
)
{
nfapi_ul_config_ulsch_pdu_rel8_t
*
rel8
=
&
ul_config_pdu
->
ulsch_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
;
LTE_eNB_ULSCH_t
*
ulsch
=
eNB
->
ulsch
[
UE_id
];
LTE_UL_eNB_HARQ_t
*
ulsch_harq
;
int
harq_pid
=
rel8
->
harq_process_number
;
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
ulsch_harq
->
frame
=
frame
;
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
];
}
uint16_t
to_beta_offset_ri
[
16
]
=
{
9
,
13
,
16
,
20
,
25
,
32
,
40
,
50
,
64
,
80
,
101
,
127
,
160
,
0
,
0
,
0
};
uint16_t
to_beta_offset_cqi
[
16
]
=
{
0
,
0
,
9
,
10
,
11
,
13
,
14
,
16
,
18
,
20
,
23
,
25
,
28
,
32
,
40
,
50
};
void
handle_ulsch_cqi_ri_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
)
{
nfapi_ul_config_cqi_ri_information_rel9_t
*
rel9
=
&
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
;
LTE_eNB_ULSCH_t
*
ulsch
=
eNB
->
ulsch
[
UE_id
];
int
harq_pid
=
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
harq_process_number
;
LTE_UL_eNB_HARQ_t
*
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
ulsch_harq
->
frame
=
frame
;
ulsch_harq
->
subframe
=
subframe
;
ulsch_harq
->
O_RI
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
;
ulsch_harq
->
Or1
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
0
];
if
(
ulsch_harq
->
O_RI
>
1
)
ulsch_harq
->
Or2
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
1
];
ulsch
->
beta_offset_ri_times8
=
to_beta_offset_ri
[
rel9
->
delta_offset_ri
];
ulsch
->
beta_offset_cqi_times8
=
to_beta_offset_cqi
[
rel9
->
delta_offset_cqi
];
LOG_D
(
PHY
,
"Filling ulsch_cqi_ri information for frame %d, subframe %d : O_RI %d, Or1 %d, beta_offset_cqi_times8 %d (%d)
\n
"
,
frame
,
subframe
,
ulsch_harq
->
O_RI
,
ulsch_harq
->
Or1
,
ulsch
->
beta_offset_cqi_times8
,
rel9
->
delta_offset_cqi
);
}
void
handle_ulsch_cqi_harq_ri_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
)
{
nfapi_ul_config_cqi_ri_information_rel9_t
*
rel9
=
&
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
;
LTE_eNB_ULSCH_t
*
ulsch
=
eNB
->
ulsch
[
UE_id
];
int
harq_pid
=
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
harq_process_number
;
LTE_UL_eNB_HARQ_t
*
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
nfapi_ul_config_ulsch_harq_information
*
harq_information
=
&
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
harq_information
;
ulsch_harq
->
frame
=
frame
;
ulsch_harq
->
subframe
=
subframe
;
ulsch_harq
->
O_RI
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
ri_size
;
ulsch_harq
->
Or1
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
0
];
ulsch_harq
->
O_ACK
=
harq_information
->
harq_information_rel10
.
harq_size
;
if
(
ulsch_harq
->
O_RI
>
1
)
ulsch_harq
->
Or2
=
rel9
->
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
1
];
ulsch
->
beta_offset_harqack_times8
=
to_beta_offset_harqack
[
harq_information
->
harq_information_rel10
.
delta_offset_harq
];
ulsch
->
beta_offset_ri_times8
=
to_beta_offset_ri
[
rel9
->
delta_offset_ri
];
ulsch
->
beta_offset_cqi_times8
=
to_beta_offset_cqi
[
rel9
->
delta_offset_cqi
];
}
void
handle_uci_harq_information
(
PHY_VARS_eNB
*
eNB
,
LTE_eNB_UCI
*
uci
,
nfapi_ul_config_harq_information
*
harq_information
)
{
if
(
eNB
->
frame_parms
.
frame_type
==
FDD
)
{
uci
->
num_pucch_resources
=
harq_information
->
harq_information_rel9_fdd
.
number_of_pucch_resources
;
LOG_D
(
PHY
,
"Programming UCI HARQ mode %d : size %d in (%d,%d)
\n
"
,
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
,
harq_information
->
harq_information_rel9_fdd
.
harq_size
,
uci
->
frame
,
uci
->
subframe
);
if
((
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
0
)
&&
(
harq_information
->
harq_information_rel9_fdd
.
harq_size
==
1
))
{
uci
->
pucch_fmt
=
pucch_format1a
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
if
((
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
0
)
&&
(
harq_information
->
harq_information_rel9_fdd
.
harq_size
==
2
))
{
uci
->
pucch_fmt
=
pucch_format1b
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
if
((
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
1
)
&&
(
harq_information
->
harq_information_rel9_fdd
.
harq_size
==
2
))
{
uci
->
pucch_fmt
=
pucch_format1b_csA2
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
uci
->
n_pucch_1
[
1
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_1
;
uci
->
n_pucch_1
[
1
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_1
;
}
else
if
((
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
1
)
&&
(
harq_information
->
harq_information_rel9_fdd
.
harq_size
==
3
))
{
uci
->
pucch_fmt
=
pucch_format1b_csA3
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
uci
->
n_pucch_1
[
1
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_1
;
uci
->
n_pucch_1
[
1
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_1
;
uci
->
n_pucch_1
[
2
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_2
;
uci
->
n_pucch_1
[
2
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_2
;
}
else
if
((
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
1
)
&&
(
harq_information
->
harq_information_rel9_fdd
.
harq_size
==
4
))
{
uci
->
pucch_fmt
=
pucch_format1b_csA4
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
uci
->
n_pucch_1
[
1
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_1
;
uci
->
n_pucch_1
[
1
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_1
;
uci
->
n_pucch_1
[
2
][
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_2
;
uci
->
n_pucch_1
[
2
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_2
;
}
else
if
(
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
==
2
)
{
uci
->
pucch_fmt
=
pucch_format3
;
uci
->
n_pucch_3
[
0
]
=
harq_information
->
harq_information_rel9_fdd
.
n_pucch_1_0
;
uci
->
n_pucch_3
[
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
AssertFatal
(
1
==
0
,
"unsupported HARQ mode %d
\n
"
,
harq_information
->
harq_information_rel9_fdd
.
ack_nack_mode
);
}
else
{
// TDD
uci
->
num_pucch_resources
=
harq_information
->
harq_information_rel10_tdd
.
number_of_pucch_resources
;
if
(
harq_information
->
harq_information_rel10_tdd
.
ack_nack_mode
==
0
)
{
//bundling
uci
->
pucch_fmt
=
harq_information
->
harq_information_rel10_tdd
.
harq_size
==
1
?
pucch_format1a
:
pucch_format1b
;
uci
->
tdd_bundling
=
1
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
if
((
harq_information
->
harq_information_rel10_tdd
.
ack_nack_mode
==
1
)
&&
//multiplexing
(
uci
->
num_pucch_resources
==
1
))
{
uci
->
pucch_fmt
=
harq_information
->
harq_information_rel10_tdd
.
harq_size
==
1
?
pucch_format1a
:
pucch_format1b
;
uci
->
tdd_bundling
=
0
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
if
((
harq_information
->
harq_information_rel10_tdd
.
ack_nack_mode
==
1
)
&&
//multiplexing M>1
(
uci
->
num_pucch_resources
>
1
))
{
uci
->
pucch_fmt
=
pucch_format1b
;
uci
->
tdd_bundling
=
0
;
uci
->
n_pucch_1
[
0
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_0
;
uci
->
n_pucch_1
[
0
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
uci
->
n_pucch_1
[
1
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_1
;
uci
->
n_pucch_1
[
1
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_1
;
uci
->
n_pucch_1
[
2
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_2
;
uci
->
n_pucch_1
[
2
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_2
;
uci
->
n_pucch_1
[
3
][
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_3
;
uci
->
n_pucch_1
[
3
][
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_3
;
}
else
if
(
harq_information
->
harq_information_rel10_tdd
.
ack_nack_mode
==
2
)
{
uci
->
pucch_fmt
=
pucch_format3
;
uci
->
n_pucch_3
[
0
]
=
harq_information
->
harq_information_rel10_tdd
.
n_pucch_1_0
;
uci
->
n_pucch_3
[
1
]
=
harq_information
->
harq_information_rel11
.
n_pucch_2_0
;
}
else
AssertFatal
(
1
==
0
,
"unsupported HARQ mode %d
\n
"
,
harq_information
->
harq_information_rel10_tdd
.
ack_nack_mode
);
}
}
void
handle_uci_sr_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
)
{
LTE_eNB_UCI
*
uci
=
&
eNB
->
uci_vars
[
UE_id
];
uci
->
frame
=
frame
;
uci
->
subframe
=
subframe
;
uci
->
rnti
=
ul_config_pdu
->
uci_sr_pdu
.
ue_information
.
ue_information_rel8
.
rnti
;
uci
->
type
=
SR
;
uci
->
pucch_fmt
=
pucch_format1
;
uci
->
num_antenna_ports
=
1
;
uci
->
num_pucch_resources
=
1
;
uci
->
n_pucch_1_0_sr
[
0
]
=
ul_config_pdu
->
uci_sr_pdu
.
sr_information
.
sr_information_rel8
.
pucch_index
;
uci
->
srs_active
=
srs_active
;
uci
->
active
=
1
;
LOG_D
(
PHY
,
"Programming UCI SR rnti %x, pucch1_0 %d for (%d,%d)
\n
"
,
uci
->
rnti
,
uci
->
n_pucch_1_0_sr
[
0
],
frame
,
subframe
);
}
void
handle_uci_sr_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
)
{
LTE_eNB_UCI
*
uci
=
&
eNB
->
uci_vars
[
UE_id
];
uci
->
frame
=
frame
;
uci
->
subframe
=
subframe
;
uci
->
rnti
=
ul_config_pdu
->
uci_sr_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
;
uci
->
type
=
HARQ_SR
;
uci
->
num_antenna_ports
=
1
;
uci
->
num_pucch_resources
=
1
;
uci
->
n_pucch_1_0_sr
[
0
]
=
ul_config_pdu
->
uci_sr_harq_pdu
.
sr_information
.
sr_information_rel8
.
pucch_index
;
uci
->
srs_active
=
srs_active
;
uci
->
active
=
1
;
handle_uci_harq_information
(
eNB
,
uci
,
&
ul_config_pdu
->
uci_sr_harq_pdu
.
harq_information
);
}
void
handle_uci_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
)
{
LTE_eNB_UCI
*
uci
=
&
eNB
->
uci_vars
[
UE_id
];
LOG_D
(
PHY
,
"Frame %d, Subframe %d: Programming UCI_HARQ process (type %d)
\n
"
,
frame
,
subframe
,
HARQ
);
uci
->
frame
=
frame
;
uci
->
subframe
=
subframe
;
uci
->
rnti
=
ul_config_pdu
->
uci_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
;
uci
->
type
=
HARQ
;
uci
->
srs_active
=
srs_active
;
uci
->
num_antenna_ports
=
ul_config_pdu
->
uci_harq_pdu
.
harq_information
.
harq_information_rel11
.
num_ant_ports
;
handle_uci_harq_information
(
eNB
,
uci
,
&
ul_config_pdu
->
uci_harq_pdu
.
harq_information
);
uci
->
active
=
1
;
}
void
handle_srs_pdu
(
PHY_VARS_eNB
*
eNB
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
)
{
int
i
;
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
if
(
eNB
->
soundingrs_ul_config_dedicated
[
i
].
active
==
1
)
continue
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
active
=
1
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
frame
=
frame
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
subframe
=
subframe
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
rnti
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
rnti
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
srs_Bandwidth
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
srs_bandwidth
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
srs_HoppingBandwidth
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
srs_hopping_bandwidth
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
freqDomainPosition
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
frequency_domain_position
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
transmissionComb
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
transmission_comb
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
srs_ConfigIndex
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
i_srs
;
eNB
->
soundingrs_ul_config_dedicated
[
i
].
cyclicShift
=
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
sounding_reference_cyclic_shift
;
break
;
}
AssertFatal
(
i
<
NUMBER_OF_UE_MAX
,
"No room for SRS processing
\n
"
);
}
void
handle_nfapi_ul_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_present
)
{
nfapi_ul_config_ulsch_pdu_rel8_t
*
rel8
=
&
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
;
int8_t
UE_id
;
// check if we have received a dci for this ue and ulsch descriptor is configured
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_ulsch
(
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No existing UE ULSCH for rnti %x
\n
"
,
rel8
->
rnti
);
LOG_D
(
PHY
,
"Applying UL config for UE %d, rnti %x for frame %d, subframe %d, modulation %d, rvidx %d
\n
"
,
UE_id
,
rel8
->
rnti
,
frame
,
subframe
,
rel8
->
modulation_type
,
rel8
->
redundancy_version
);
fill_ulsch
(
eNB
,
&
ul_config_pdu
->
ulsch_pdu
,
frame
,
subframe
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_ulsch
(
ul_config_pdu
->
ulsch_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE ULSCH for rnti %x
\n
"
,
ul_config_pdu
->
ulsch_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
);
fill_ulsch
(
eNB
,
&
ul_config_pdu
->
ulsch_harq_pdu
.
ulsch_pdu
,
frame
,
subframe
);
handle_ulsch_harq_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
&
ul_config_pdu
->
ulsch_harq_pdu
.
harq_information
,
frame
,
subframe
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_ulsch
(
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE ULSCH for rnti %x
\n
"
,
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
);
fill_ulsch
(
eNB
,
&
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
ulsch_pdu
,
frame
,
subframe
);
handle_ulsch_cqi_ri_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
frame
,
subframe
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_ulsch
(
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE ULSCH for rnti %x
\n
"
,
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
);
fill_ulsch
(
eNB
,
&
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
ulsch_pdu
,
frame
,
subframe
);
handle_ulsch_cqi_harq_ri_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
frame
,
subframe
);
handle_ulsch_harq_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
&
ul_config_pdu
->
ulsch_cqi_harq_ri_pdu
.
harq_information
,
frame
,
subframe
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_uci
(
ul_config_pdu
->
uci_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE UCI for rnti %x
\n
"
,
ul_config_pdu
->
uci_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
);
handle_uci_harq_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
frame
,
subframe
,
srs_present
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE
)
{
AssertFatal
(
1
==
0
,
"NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE not handled yet
\n
"
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE
)
{
AssertFatal
(
1
==
0
,
"NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE not handled yet
\n
"
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE
)
{
AssertFatal
(
1
==
0
,
"NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE not handled yet
\n
"
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_uci
(
ul_config_pdu
->
uci_sr_pdu
.
ue_information
.
ue_information_rel8
.
rnti
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE UCI for rnti %x
\n
"
,
ul_config_pdu
->
uci_sr_pdu
.
ue_information
.
ue_information_rel8
.
rnti
);
handle_uci_sr_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
frame
,
subframe
,
srs_present
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
)
{
AssertFatal
((
UE_id
=
find_uci
(
rel8
->
rnti
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No available UE UCI for rnti %x
\n
"
,
ul_config_pdu
->
uci_sr_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
);
handle_uci_sr_harq_pdu
(
eNB
,
UE_id
,
ul_config_pdu
,
frame
,
subframe
,
srs_present
);
}
else
if
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_SRS_PDU_TYPE
)
{
handle_srs_pdu
(
eNB
,
ul_config_pdu
,
frame
,
subframe
);
}
}
void
TX_request
(){
}
void
DL_config
(){
}
void
UL_config
(){
}
void
CONFIG_request
(){
}
void
schedule_response
(
Sched_Rsp_t
*
Sched_INFO
)
{
PHY_VARS_eNB
*
eNB
;
eNB_rxtx_proc_t
*
proc
;
// copy data from L2 interface into L1 structures
module_id_t
Mod_id
=
Sched_INFO
->
module_id
;
uint8_t
CC_id
=
Sched_INFO
->
CC_id
;
nfapi_dl_config_request_t
*
DL_req
=
Sched_INFO
->
DL_req
;
nfapi_hi_dci0_request_t
*
HI_DCI0_req
=
Sched_INFO
->
HI_DCI0_req
;
nfapi_ul_config_request_t
*
UL_req
=
Sched_INFO
->
UL_req
;
nfapi_tx_request_t
*
TX_req
=
Sched_INFO
->
TX_req
;
frame_t
frame
=
Sched_INFO
->
frame
;
sub_frame_t
subframe
=
Sched_INFO
->
subframe
;
LTE_DL_FRAME_PARMS
*
fp
;
uint8_t
ul_subframe
;
int
ul_frame
;
int
harq_pid
;
LTE_UL_eNB_HARQ_t
*
ulsch_harq
;
AssertFatal
(
RC
.
eNB
!=
NULL
,
"RC.eNB is null
\n
"
);
AssertFatal
(
RC
.
eNB
[
Mod_id
]
!=
NULL
,
"RC.eNB[%d] is null
\n
"
,
Mod_id
);
AssertFatal
(
RC
.
eNB
[
Mod_id
][
CC_id
]
!=
NULL
,
"RC.eNB[%d][%d] is null
\n
"
,
Mod_id
,
CC_id
);
eNB
=
RC
.
eNB
[
Mod_id
][
CC_id
];
fp
=
&
eNB
->
frame_parms
;
proc
=
&
eNB
->
proc
.
proc_rxtx
[
0
];
/* TODO: check that following line is correct - in the meantime it is disabled */
//if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)==SF_UL)) return;
ul_subframe
=
pdcch_alloc2ul_subframe
(
fp
,
subframe
);
ul_frame
=
pdcch_alloc2ul_frame
(
fp
,
frame
,
subframe
);
// DJP - subframe assert will fail - not sure why yet
// DJP - AssertFatal(proc->subframe_tx == subframe, "Current subframe %d != NFAPI subframe %d\n",proc->subframe_tx,subframe);
// DJP - AssertFatal(proc->subframe_tx == subframe, "Current frame %d != NFAPI frame %d\n",proc->frame_tx,frame);
uint8_t
number_pdcch_ofdm_symbols
=
DL_req
->
dl_config_request_body
.
number_pdcch_ofdm_symbols
;
uint8_t
number_dl_pdu
=
DL_req
->
dl_config_request_body
.
number_pdu
;
uint8_t
number_hi_dci0_pdu
=
HI_DCI0_req
->
hi_dci0_request_body
.
number_of_dci
+
HI_DCI0_req
->
hi_dci0_request_body
.
number_of_hi
;
uint8_t
number_ul_pdu
=
UL_req
!=
NULL
?
UL_req
->
ul_config_request_body
.
number_of_pdus
:
0
;
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_req_pdu
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
;
int
i
;
eNB
->
pdcch_vars
[
subframe
&
1
].
num_pdcch_symbols
=
number_pdcch_ofdm_symbols
;
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
);
int
do_oai
=
0
;
int
dont_send
=
0
;
/* TODO: check the following test - in the meantime it is put back as it was before */
//if ((ul_subframe<10)&&
// (subframe_select(fp,ul_subframe)==SF_UL)) { // This means that there is an ul_subframe that can be configured here
if
(
ul_subframe
<
10
)
{
// This means that there is an ul_subframe that can be configured here
LOG_D
(
PHY
,
"NFAPI: Clearing dci allocations for potential UL subframe %d
\n
"
,
ul_subframe
);
harq_pid
=
subframe2harq_pid
(
fp
,
ul_frame
,
ul_subframe
);
// clear DCI allocation maps for new subframe
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
if
(
eNB
->
ulsch
[
i
])
{
ulsch_harq
=
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
];
ulsch_harq
->
dci_alloc
=
0
;
ulsch_harq
->
rar_alloc
=
0
;
}
}
}
for
(
i
=
0
;
i
<
number_dl_pdu
;
i
++
)
{
dl_config_pdu
=
&
DL_req
->
dl_config_request_body
.
dl_config_pdu_list
[
i
];
//LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);
switch
(
dl_config_pdu
->
pdu_type
)
{
case
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
:
handle_nfapi_dci_dl_pdu
(
eNB
,
NFAPI_SFNSF2SFN
(
DL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
),
proc
,
dl_config_pdu
);
eNB
->
pdcch_vars
[
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
)
&
1
].
num_dci
++
;
//LOG_E(PHY,"Incremented num_dci:%d but already set??? dl_config:num_dci:%d\n", eNB->pdcch_vars[subframe&1].num_dci, number_dci);
do_oai
=
1
;
break
;
case
NFAPI_DL_CONFIG_BCH_PDU_TYPE
:
AssertFatal
(
dl_config_pdu
->
bch_pdu
.
bch_pdu_rel8
.
pdu_index
<
TX_req
->
tx_request_body
.
number_of_pdus
,
"bch_pdu_rel8.pdu_index>=TX_req->number_of_pdus (%d>%d)
\n
"
,
dl_config_pdu
->
bch_pdu
.
bch_pdu_rel8
.
pdu_index
,
TX_req
->
tx_request_body
.
number_of_pdus
);
eNB
->
pbch_configured
=
1
;
do_oai
=
1
;
//LOG_D(PHY,"%s() NFAPI_DL_CONFIG_BCH_PDU_TYPE TX:%d/%d RX:%d/%d TXREQ:%d/%d\n",
//__FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->frame_rx, proc->subframe_rx, NFAPI_SFNSF2SFN(TX_req->sfn_sf), NFAPI_SFNSF2SF(TX_req->sfn_sf));
handle_nfapi_bch_pdu
(
eNB
,
proc
,
dl_config_pdu
,
TX_req
->
tx_request_body
.
tx_pdu_list
[
dl_config_pdu
->
bch_pdu
.
bch_pdu_rel8
.
pdu_index
].
segments
[
0
].
segment_data
);
break
;
case
NFAPI_DL_CONFIG_MCH_PDU_TYPE
:
// handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE
:
{
nfapi_dl_config_dlsch_pdu_rel8_t
*
dlsch_pdu_rel8
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
;
uint16_t
pdu_index
=
dlsch_pdu_rel8
->
pdu_index
;
uint16_t
tx_pdus
=
TX_req
->
tx_request_body
.
number_of_pdus
;
uint16_t
invalid_pdu
=
pdu_index
==
-
1
;
uint8_t
*
sdu
=
invalid_pdu
?
NULL
:
pdu_index
>=
tx_pdus
?
NULL
:
TX_req
->
tx_request_body
.
tx_pdu_list
[
pdu_index
].
segments
[
0
].
segment_data
;
LOG_D
(
PHY
,
"%s() [PDU:%d] NFAPI_DL_CONFIG_DLSCH_PDU_TYPE SFN/SF:%04d%d TX:%d/%d RX:%d/%d transport_blocks:%d pdu_index:%d sdu:%p
\n
"
,
__FUNCTION__
,
i
,
NFAPI_SFNSF2SFN
(
DL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
),
proc
->
frame_tx
,
proc
->
subframe_tx
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
dlsch_pdu_rel8
->
transport_blocks
,
pdu_index
,
sdu
);
/*
AssertFatal(dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index<TX_req->tx_request_body.number_of_pdus,
"dlsch_pdu_rel8.pdu_index>=TX_req->number_of_pdus (%d>%d)\n",
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,
TX_req->tx_request_body.number_of_pdus);
*/
AssertFatal
((
dlsch_pdu_rel8
->
transport_blocks
<
3
)
&&
(
dlsch_pdu_rel8
->
transport_blocks
>
0
),
"dlsch_pdu_rel8->transport_blocks = %d not in [1,2]
\n
"
,
dlsch_pdu_rel8
->
transport_blocks
);
if
(
1
)
//sdu != NULL)
{
handle_nfapi_dlsch_pdu
(
eNB
,
NFAPI_SFNSF2SFN
(
DL_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
DL_req
->
sfn_sf
),
proc
,
dl_config_pdu
,
dlsch_pdu_rel8
->
transport_blocks
-
1
,
sdu
);
}
else
{
dont_send
=
1
;
LOG_E
(
MAC
,
"%s() NFAPI_DL_CONFIG_DLSCH_PDU_TYPE sdu is NULL DL_CFG:SFN/SF:%d:pdu_index:%d TX_REQ:SFN/SF:%d:pdus:%d
\n
"
,
__FUNCTION__
,
NFAPI_SFNSF2DEC
(
DL_req
->
sfn_sf
),
pdu_index
,
NFAPI_SFNSF2DEC
(
TX_req
->
sfn_sf
),
tx_pdus
);
}
// Send the data first so that the DL_CONFIG can just pluck it out of the buffer
// DJP - OAI was here - moved to bottom
do_oai
=
1
;
/*
if (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti == eNB->preamble_list[0].preamble_rel8.rnti) {// is RAR pdu
LOG_D(PHY,"Frame %d, Subframe %d: Received LTE RAR pdu, programming based on UL Grant\n",frame,subframe);
generate_eNB_ulsch_params_from_rar(eNB,
TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data,
frame,
subframe);
} */
}
break
;
case
NFAPI_DL_CONFIG_PCH_PDU_TYPE
:
// handle_nfapi_pch_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_PRS_PDU_TYPE
:
// handle_nfapi_prs_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE
:
// handle_nfapi_csi_rs_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE
:
// handle_nfapi_epdcch_pdu(eNB,dl_config_pdu);
break
;
#ifdef Rel14
case
NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE
:
#ifdef Rel14
handle_nfapi_mpdcch_pdu
(
eNB
,
proc
,
dl_config_pdu
);
eNB
->
mpdcch_vars
[
subframe
&
1
].
num_dci
++
;
#endif
break
;
#endif
}
}
if
(
nfapi_mode
&&
do_oai
&&
!
dont_send
)
{
oai_nfapi_tx_req
(
Sched_INFO
->
TX_req
);
oai_nfapi_dl_config_req
(
Sched_INFO
->
DL_req
);
// DJP - .dl_config_request_body.dl_config_pdu_list[0]); // DJP - FIXME TODO - yuk - only copes with 1 pdu
}
if
(
nfapi_mode
&&
number_hi_dci0_pdu
!=
0
)
{
oai_nfapi_hi_dci0_req
(
HI_DCI0_req
);
eNB
->
pdcch_vars
[
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
)
&
1
].
num_dci
=
0
;
eNB
->
pdcch_vars
[
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
)
&
1
].
num_pdcch_symbols
=
0
;
}
for
(
i
=
0
;
i
<
number_hi_dci0_pdu
;
i
++
)
{
hi_dci0_req_pdu
=
&
HI_DCI0_req
->
hi_dci0_request_body
.
hi_dci0_pdu_list
[
i
];
LOG_D
(
PHY
,
"NFAPI: hi_dci0_pdu %d : type %d
\n
"
,
i
,
hi_dci0_req_pdu
->
pdu_type
);
switch
(
hi_dci0_req_pdu
->
pdu_type
)
{
case
NFAPI_HI_DCI0_DCI_PDU_TYPE
:
handle_nfapi_hi_dci0_dci_pdu
(
eNB
,
NFAPI_SFNSF2SFN
(
HI_DCI0_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
),
proc
,
hi_dci0_req_pdu
);
eNB
->
pdcch_vars
[
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
)
&
1
].
num_dci
++
;
break
;
case
NFAPI_HI_DCI0_HI_PDU_TYPE
:
handle_nfapi_hi_dci0_hi_pdu
(
eNB
,
NFAPI_SFNSF2SFN
(
HI_DCI0_req
->
sfn_sf
),
NFAPI_SFNSF2SF
(
HI_DCI0_req
->
sfn_sf
),
proc
,
hi_dci0_req_pdu
);
break
;
}
}
if
(
nfapi_mode
)
{
if
(
number_ul_pdu
>
0
)
{
//LOG_D(PHY, "UL_CONFIG to send to PNF\n");
oai_nfapi_ul_config_req
(
UL_req
);
UL_req
->
ul_config_request_body
.
number_of_pdus
=
0
;
number_ul_pdu
=
0
;
}
}
else
{
for
(
i
=
0
;
i
<
number_ul_pdu
;
i
++
)
{
ul_config_pdu
=
&
UL_req
->
ul_config_request_body
.
ul_config_pdu_list
[
i
];
LOG_D
(
PHY
,
"NFAPI: ul_pdu %d : type %d
\n
"
,
i
,
ul_config_pdu
->
pdu_type
);
AssertFatal
(
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE
||
ul_config_pdu
->
pdu_type
==
NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
,
"Optional UL_PDU type %d not supported
\n
"
,
ul_config_pdu
->
pdu_type
);
handle_nfapi_ul_pdu
(
eNB
,
proc
,
ul_config_pdu
,
UL_req
->
sfn_sf
>>
4
,
UL_req
->
sfn_sf
&
0xf
,
UL_req
->
ul_config_request_body
.
srs_present
);
}
}
}
openair1/SCHED_NR_UE/fapi_l1.h
deleted
100644 → 0
View file @
d978b6d2
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file fapi_l1.h
* \brief function prototypes for FAPI L1 interface
* \author R. Knopp
* \date 2017
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \note
* \warning
*/
#include "PHY/defs_eNB.h"
#include "PHY/phy_extern.h"
#include "PHY/LTE_TRANSPORT/transport_proto.h"
#include "SCHED/sched_eNB.h"
#include "SCHED/sched_common.h"
#include "nfapi_interface.h"
void
fill_uci_harq_indication
(
PHY_VARS_eNB
*
eNB
,
LTE_eNB_UCI
*
uci
,
int
frame
,
int
subframe
,
uint8_t
*
harq_ack
,
uint8_t
tdd_mapping_mode
,
uint16_t
tdd_multiplexing_mask
);
void
fill_ulsch_harq_indication
(
PHY_VARS_eNB
*
eNB
,
LTE_UL_eNB_HARQ_t
*
ulsch_harq
,
uint16_t
rnti
,
int
frame
,
int
subframe
,
int
bundling
);
void
fill_ulsch_cqi_indication
(
PHY_VARS_eNB
*
eNB
,
uint16_t
frame
,
uint8_t
subframe
,
LTE_UL_eNB_HARQ_t
*
ulsch_harq
,
uint16_t
rnti
);
void
fill_sr_indication
(
PHY_VARS_eNB
*
eNB
,
uint16_t
rnti
,
int
frame
,
int
subframe
,
uint32_t
stat
);
void
fill_rx_indication
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
int
frame
,
int
subframe
);
void
fill_crc_indication
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
int
frame
,
int
subframe
,
uint8_t
crc_flag
);
void
handle_nfapi_dci_dl_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
);
void
handle_nfapi_mpdcch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
);
void
handle_nfapi_hi_dci0_dci_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
);
void
handle_nfapi_hi_dci0_hi_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
);
void
handle_nfapi_dlsch_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
,
uint8_t
codeword_index
,
uint8_t
*
sdu
);
void
handle_nfapi_ul_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_present
);
void
handle_ulsch_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
nfapi_ul_config_ulsch_harq_information
*
harq_information
,
uint16_t
frame
,
uint8_t
subframe
);
void
handle_ulsch_cqi_ri_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
);
void
handle_uci_harq_information
(
PHY_VARS_eNB
*
eNB
,
LTE_eNB_UCI
*
uci
,
nfapi_ul_config_harq_information
*
harq_information
);
void
handle_uci_sr_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
);
void
handle_uci_sr_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
);
void
handle_uci_harq_pdu
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
,
uint8_t
srs_active
);
void
handle_srs_pdu
(
PHY_VARS_eNB
*
eNB
,
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
,
uint16_t
frame
,
uint8_t
subframe
);
void
schedule_response
(
Sched_Rsp_t
*
Sched_INFO
);
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
46d08aed
...
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
/*
!
\file fapi_nr_ue_l1.c
/* \file fapi_nr_ue_l1.c
* \brief functions for NR UE FAPI-like interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
View file @
46d08aed
...
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
/*
!
\file fapi_nr_ue_l1.c
/* \file fapi_nr_ue_l1.c
* \brief functions for FAPI L1 interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
46d08aed
...
...
@@ -19,15 +19,17 @@
* contact@openairinterface.org
*/
/*
!
\file config.c
/* \file config.c
* \brief UE and eNB configuration performed by RRC or as a consequence of RRC procedures
* \author
Navid Nikaein and Raymond Knopp
* \date 201
0 - 2014
* \author
R. Knopp, K.H. HSU
* \date 201
8
* \version 0.1
* \email: navid.nikaein@eurecom.fr
* @ingroup _mac
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "defs.h"
#include "proto.h"
...
...
openair2/LAYER2/NR_MAC_UE/extern.h
deleted
100644 → 0
View file @
d978b6d2
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file extern.h
* \brief mac externs
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 1.0
* \email navid.nikaein@eurecom.fr
* @ingroup _mac
*/
#ifndef __MAC_EXTERN_H__
#define __MAC_EXTERN_H__
#ifdef USER_MODE
//#include "stdio.h"
#endif //USER_MODE
//#include "PHY/defs.h"
#include "PHY/defs_nr_UE.h"
#include "defs.h"
#include "COMMON/mac_rrc_primitives.h"
#ifdef PHY_EMUL
//#include "SIMULATION/simulation_defs.h"
#endif //PHY_EMUL
//#include "PHY_INTERFACE/defs.h"
//#include "RRC/LITE/defs.h"
extern
const
uint32_t
BSR_TABLE
[
BSR_TABLE_SIZE
];
//extern uint32_t EBSR_Level[63];
extern
const
uint32_t
Extended_BSR_TABLE
[
BSR_TABLE_SIZE
];
//extern uint32_t Extended_BSR_TABLE[63]; ----currently not used
extern
const
uint8_t
cqi2fmt0_agg
[
MAX_SUPPORTED_BW
][
CQI_VALUE_RANGE
];
extern
const
uint8_t
cqi2fmt1x_agg
[
MAX_SUPPORTED_BW
][
CQI_VALUE_RANGE
];
extern
const
uint8_t
cqi2fmt2x_agg
[
MAX_SUPPORTED_BW
][
CQI_VALUE_RANGE
];
extern
UE_MAC_INST
*
UE_mac_inst
;
extern
eNB_MAC_INST
*
eNB_mac_inst
;
extern
eNB_RRC_INST
*
eNB_rrc_inst
;
extern
UE_RRC_INST
*
UE_rrc_inst
;
extern
UE_MAC_INST
*
ue_mac_inst
;
extern
MAC_RLC_XFACE
*
Mac_rlc_xface
;
extern
uint8_t
Is_rrc_registered
;
extern
eNB_ULSCH_INFO
eNB_ulsch_info
[
NUMBER_OF_eNB_MAX
][
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
// eNBxUE = 8x8
extern
eNB_DLSCH_INFO
eNB_dlsch_info
[
NUMBER_OF_eNB_MAX
][
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
];
// eNBxUE = 8x8
//#ifndef USER_MODE
//extern MAC_xface *mac_xface;
extern
RRC_XFACE
*
Rrc_xface
;
extern
uint8_t
Is_rrc_registered
;
#ifndef PHY_EMUL
#ifndef PHYSIM
#define NB_INST 1
#else
extern
unsigned
char
NB_INST
;
#endif
extern
unsigned
char
NB_eNB_INST
;
extern
unsigned
char
NB_UE_INST
;
extern
unsigned
char
NB_RN_INST
;
extern
unsigned
short
NODE_ID
[
1
];
extern
void
*
bigphys_malloc
(
int
);
#else
extern
EMULATION_VARS
*
Emul_vars
;
#endif //PHY_EMUL
extern
int
cqi_to_mcs
[
16
];
extern
uint32_t
RRC_CONNECTION_FLAG
;
extern
uint8_t
rb_table
[
33
];
extern
DCI0_5MHz_TDD_1_6_t
UL_alloc_pdu
;
extern
DCI1A_5MHz_TDD_1_6_t
RA_alloc_pdu
;
extern
DCI1A_5MHz_TDD_1_6_t
DLSCH_alloc_pdu1A
;
extern
DCI1A_5MHz_TDD_1_6_t
BCCH_alloc_pdu
;
extern
DCI1A_5MHz_TDD_1_6_t
CCCH_alloc_pdu
;
extern
DCI1_5MHz_TDD_t
DLSCH_alloc_pdu
;
extern
DCI0_5MHz_FDD_t
UL_alloc_pdu_fdd
;
extern
DCI1A_5MHz_FDD_t
DLSCH_alloc_pdu1A_fdd
;
extern
DCI1A_5MHz_FDD_t
RA_alloc_pdu_fdd
;
extern
DCI1A_5MHz_FDD_t
BCCH_alloc_pdu_fdd
;
extern
DCI1A_5MHz_FDD_t
CCCH_alloc_pdu_fdd
;
extern
DCI1_5MHz_FDD_t
DLSCH_alloc_pdu_fdd
;
extern
DCI2_5MHz_2A_TDD_t
DLSCH_alloc_pdu1
;
extern
DCI2_5MHz_2A_TDD_t
DLSCH_alloc_pdu2
;
extern
DCI1E_5MHz_2A_M10PRB_TDD_t
DLSCH_alloc_pdu1E
;
#endif //DEF_H
openair2/LAYER2/NR_MAC_UE/mac.h
View file @
46d08aed
...
...
@@ -19,21 +19,17 @@
* contact@openairinterface.org
*/
/*! \file LAYER2/MAC/defs.h
* \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp
* \date 2011
* \version 0.5
* \email navid.nikaein@eurecom.fr
*/
/** @defgroup _oai2 openair2 Reference Implementation
* @ingroup _ref_implementation_
* @{
/* \file mac.h
* \brief MAC data structures, constant, and function prototype
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
/*@}*/
#ifndef __LAYER2_NR_UE_MAC_DEFS_H__
#define __LAYER2_NR_UE_MAC_DEFS_H__
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
46d08aed
...
...
@@ -19,21 +19,17 @@
* contact@openairinterface.org
*/
/*! \file LAYER2/MAC/defs.h
* \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp
* \date 2011
* \version 0.5
* \email navid.nikaein@eurecom.fr
*/
/** @defgroup _oai2 openair2 Reference Implementation
* @ingroup _ref_implementation_
* @{
/* \file mac_defs.h
* \brief MAC data structures, constant, and function prototype
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
/*@}*/
#ifndef __LAYER2_NR_MAC_DEFS_H__
#define __LAYER2_NR_MAC_DEFS_H__
...
...
openair2/LAYER2/NR_MAC_UE/mac_vars.c
View file @
46d08aed
...
...
@@ -19,15 +19,16 @@
* contact@openairinterface.org
*/
/*! \file vars.h
* \brief mac vars
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 1.0
* \email navid.nikaein@eurecom.fr
* @ingroup _mac
*/
/* \file vars.h
* \brief MAC Layer variables
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "mac_defs.h"
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
46d08aed
...
...
@@ -19,14 +19,15 @@
* contact@openairinterface.org
*/
/*
! \file main
.c
/*
\file main_ue_nr
.c
* \brief top init of Layer 2
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 1.0
* \email: navid.nikaein@eurecom.fr
* @ingroup _mac
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "defs.h"
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
46d08aed
...
...
@@ -19,15 +19,17 @@
* contact@openairinterface.org
*/
/*
!
\file ue_procedures.c
/* \file ue_procedures.c
* \brief procedures related to UE
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 1
* \email: navid.nikaein@eurecom.fr
* @ingroup _mac
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "proto.h"
#include "RRC/NR_UE/rrc_proto.h"
...
...
openair2/LAYER2/NR_MAC_UE/proto.h
View file @
46d08aed
...
...
@@ -19,13 +19,17 @@
* contact@openairinterface.org
*/
/*
! \file LAYER2/MAC/
proto.h
/*
\file
proto.h
* \brief MAC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \email navid.nikaein@eurecom.fr
* \version 1.0
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef __LAYER2_MAC_PROTO_H__
#define __LAYER2_MAC_PROTO_H__
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
46d08aed
...
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
/*
!
\file NR_IF_Module.c
/* \file NR_IF_Module.c
* \brief functions for NR UE FAPI-like interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
...
...
@@ -102,7 +102,7 @@ nr_ue_if_module_t *nr_ue_if_module_init(uint32_t module_id){
memset
((
void
*
)
nr_ue_if_module_inst
[
module_id
],
0
,
sizeof
(
nr_ue_if_module_t
));
nr_ue_if_module_inst
[
module_id
]
->
CC_mask
=
0
;
nr_ue_if_module_
register_dl_indication
(
module_id
,
nr_ue_dl_indication
)
;
nr_ue_if_module_
inst
[
module_id
]
->
dl_indication
=
nr_ue_dl_indication
;
}
return
nr_ue_if_module_inst
[
module_id
];
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
View file @
46d08aed
...
...
@@ -19,16 +19,17 @@
* contact@openairinterface.org
*/
/*! \file openair2/PHY_INTERFACE/IF_Module.h
* \brief data structures for PHY/MAC interface modules
* \author EURECOM/NTUST
* \date 2018
* \version 0.1
* \company Eurecom
* \email: raymond.knopp@eurecom.fr
* \note
* \warning
*/
/* \file NR_IF_Module.h
* \brief data structures for L1/L2 interface modules
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef __NR_IF_MODULE_H__
#define __NR_IF_MODULE_H__
...
...
openair2/RRC/NR_UE/L2_interface_ue.c
View file @
46d08aed
...
...
@@ -19,13 +19,15 @@
* contact@openairinterface.org
*/
/*
! \file l2_interfac
e.c
/*
\file l2_interface_u
e.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
* \version 1.0
* \company Eurecom
* \email: raymond.knopp@eurecom.fr
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "rrc_defs.h"
...
...
openair2/RRC/NR_UE/main_ue.c
View file @
46d08aed
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/* \file main_ue.c
* \brief RRC layer top level initialization
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#include "defs.h"
#include "rrc_proto.h"
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
46d08aed
...
...
@@ -19,13 +19,15 @@
* contact@openairinterface.org
*/
/*! \file rrc_UE.c
* \brief rrc procedures for UE
* \author Navid Nikaein and Raymond Knopp
* \date 2011 - 2014
* \version 1.0
* \company Eurecom
* \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr
/* \file rrc_UE.c
* \brief RRC procedures
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#define RRC_UE
...
...
openair2/RRC/NR_UE/rrc_defs.h
View file @
46d08aed
...
...
@@ -19,14 +19,16 @@
* contact@openairinterface.org
*/
/*! \file RRC/LITE/defs.h
* \brief RRC struct definitions and function prototypes
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 1.0
* \company Eurecom
* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
*/
/* \file rrc_defs.h
* \brief RRC structures/types definition
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef __OPENAIR_NR_RRC_DEFS_H__
#define __OPENAIR_NR_RRC_DEFS_H__
...
...
openair2/RRC/NR_UE/rrc_list.h
View file @
46d08aed
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/* \file rrc_list.h
* \brief linked list implementation for ToAddModList mechanism in RRC layer
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef _RRC_LIST_H_
#define _RRC_LIST_H_
...
...
openair2/RRC/NR_UE/rrc_proto.h
View file @
46d08aed
...
...
@@ -19,17 +19,17 @@
* contact@openairinterface.org
*/
/*
!
\file proto.h
/* \file proto.h
* \brief RRC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \email navid.nikaein@eurecom.fr
* \version 1.0
*/
/** \addtogroup _rrc
* @{
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef _RRC_PROTO_H_
#define _RRC_PROTO_H_
...
...
openair2/RRC/NR_UE/rrc_vars.h
View file @
46d08aed
...
...
@@ -19,14 +19,16 @@
* contact@openairinterface.org
*/
/*! \file vars.hles
* \brief rrc variables
* \author Raymond Knopp and Navid Nikaein
* \date 2013
* \version 1.0
* \company Eurecom
* \email: navid.nikaein@eurecom.fr
*/
/* \file vars.h
* \brief RRC layer variables
* \author R. Knopp, K.H. HSU
* \date 2018
* \version 0.1
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
#ifndef __OPENAIR_NR_RRC_VARS_H__
...
...
targets/RT/USER/nr-ue.c
View file @
46d08aed
...
...
@@ -40,8 +40,8 @@
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
#include "fapi_nr_ue_l1.h"
#include "PHY/phy_extern_nr_ue.h"
//#include "LAYER2/NR_MAC_UE/extern.h"
#include "LAYER2/NR_MAC_UE/proto.h"
#include "SCHED_NR/extern.h"
...
...
@@ -220,6 +220,9 @@ void init_UE(int nb_inst)
LOG_I
(
PHY
,
"Initializing memory for UE instance %d (%p)
\n
"
,
inst
,
PHY_vars_UE_g
[
inst
]);
PHY_vars_UE_g
[
inst
][
0
]
=
init_nr_ue_vars
(
NULL
,
inst
,
0
);
AssertFatal
((
UE
->
if_inst
=
IF_Module_init
(
inst
))
!=
NULL
,
"Can't register interface module
\n
"
);
UE
->
if_inst
->
scheduled_response
=
nr_ue_scheduled_response
;
UE
->
if_inst
->
phy_config_request
=
nr_ue_phy_config_request
;
AssertFatal
(
0
==
pthread_create
(
&
UE
->
proc
.
pthread_ue
,
&
UE
->
proc
.
attr_ue
,
...
...
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