Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
317ab77f
Commit
317ab77f
authored
Jul 16, 2018
by
Calvin HSU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UE: add IF module initialization in nr-ue.c
update author contact information
parent
7897295c
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 @
317ab77f
...
@@ -67,8 +67,12 @@ typedef struct {
...
@@ -67,8 +67,12 @@ typedef struct {
#define FAPI_NR_TAG_LENGTH_PACKED_LEN 4
#define FAPI_NR_TAG_LENGTH_PACKED_LEN 4
typedef
struct
{
typedef
struct
{
fapi_nr_tl_t
tl
;
// config
// common C-RNTI
uint8_t
cce_idx
;
uint8_t
aggregation_level
;
uint16_t
rnti
;
// dci pdu
uint8_t
dci_format
;
uint8_t
dci_format
;
uint8_t
frequency_domain_resouce_assignment
;
// 38.214 chapter 5.1.2.2
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
uint8_t
time_domain_resource_assignment
;
// 38.214 chapter 5.1.2.1
...
...
openair1/PHY/defs_nr_UE.h
View file @
317ab77f
...
@@ -991,6 +991,8 @@ typedef struct {
...
@@ -991,6 +991,8 @@ typedef struct {
NR_DL_FRAME_PARMS
frame_parms_before_ho
;
NR_DL_FRAME_PARMS
frame_parms_before_ho
;
NR_UE_COMMON
common_vars
;
NR_UE_COMMON
common_vars
;
nr_ue_if_module_t
*
if_inst
;
// point to the current rxTx thread index
// point to the current rxTx thread index
uint8_t
current_thread_id
[
10
];
uint8_t
current_thread_id
[
10
];
...
...
openair1/SCHED_NR_UE/fapi_l1.c
deleted
100644 → 0
View file @
7897295c
/*
* 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 @
7897295c
/*
* 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 @
317ab77f
...
@@ -19,13 +19,13 @@
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file fapi_nr_ue_l1.c
/* \file fapi_nr_ue_l1.c
* \brief functions for NR UE FAPI-like interface
* \brief functions for NR UE FAPI-like interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \date 2018
* \version 0.1
* \version 0.1
* \company Eurecom
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \note
* \warning
* \warning
*/
*/
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.h
View file @
317ab77f
...
@@ -19,13 +19,13 @@
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file fapi_nr_ue_l1.c
/* \file fapi_nr_ue_l1.c
* \brief functions for FAPI L1 interface
* \brief functions for FAPI L1 interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \date 2018
* \version 0.1
* \version 0.1
* \company Eurecom
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \note
* \warning
* \warning
*/
*/
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
317ab77f
...
@@ -19,15 +19,17 @@
...
@@ -19,15 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file config.c
/* \file config.c
* \brief UE and eNB configuration performed by RRC or as a consequence of RRC procedures
* \brief UE and eNB configuration performed by RRC or as a consequence of RRC procedures
* \author
Navid Nikaein and Raymond Knopp
* \author
R. Knopp, K.H. HSU
* \date 201
0 - 2014
* \date 201
8
* \version 0.1
* \version 0.1
* \email: navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* @ingroup _mac
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#include "defs.h"
#include "defs.h"
#include "proto.h"
#include "proto.h"
...
...
openair2/LAYER2/NR_MAC_UE/extern.h
deleted
100644 → 0
View file @
7897295c
/*
* 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 @
317ab77f
...
@@ -19,21 +19,17 @@
...
@@ -19,21 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file LAYER2/MAC/defs.h
/* \file mac.h
* \brief MAC data structures, constant, and function prototype
* \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2011
* \date 2018
* \version 0.5
* \version 0.1
* \email navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
*/
* \note
/** @defgroup _oai2 openair2 Reference Implementation
* \warning
* @ingroup _ref_implementation_
* @{
*/
*/
/*@}*/
#ifndef __LAYER2_NR_UE_MAC_DEFS_H__
#ifndef __LAYER2_NR_UE_MAC_DEFS_H__
#define __LAYER2_NR_UE_MAC_DEFS_H__
#define __LAYER2_NR_UE_MAC_DEFS_H__
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
317ab77f
...
@@ -19,21 +19,17 @@
...
@@ -19,21 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file LAYER2/MAC/defs.h
/* \file mac_defs.h
* \brief MAC data structures, constant, and function prototype
* \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2011
* \date 2018
* \version 0.5
* \version 0.1
* \email navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
*/
* \note
/** @defgroup _oai2 openair2 Reference Implementation
* \warning
* @ingroup _ref_implementation_
* @{
*/
*/
/*@}*/
#ifndef __LAYER2_NR_MAC_DEFS_H__
#ifndef __LAYER2_NR_MAC_DEFS_H__
#define __LAYER2_NR_MAC_DEFS_H__
#define __LAYER2_NR_MAC_DEFS_H__
...
...
openair2/LAYER2/NR_MAC_UE/mac_vars.c
View file @
317ab77f
...
@@ -19,15 +19,16 @@
...
@@ -19,15 +19,16 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file vars.h
/* \file vars.h
* \brief mac vars
* \brief MAC Layer variables
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \version 1.0
* \version 0.1
* \email navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* @ingroup _mac
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
*/
* \warning
*/
#include "mac_defs.h"
#include "mac_defs.h"
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
317ab77f
...
@@ -19,14 +19,15 @@
...
@@ -19,14 +19,15 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
! \file main
.c
/*
\file main_ue_nr
.c
* \brief top init of Layer 2
* \brief top init of Layer 2
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \version 1.0
* \version 0.1
* \email: navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* @ingroup _mac
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#include "defs.h"
#include "defs.h"
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
317ab77f
...
@@ -19,15 +19,17 @@
...
@@ -19,15 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file ue_procedures.c
/* \file ue_procedures.c
* \brief procedures related to UE
* \brief procedures related to UE
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \version 1
* \version 0.1
* \email: navid.nikaein@eurecom.fr
* \company Eurecom / NTUST
* @ingroup _mac
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#include "proto.h"
#include "proto.h"
#include "RRC/NR_UE/rrc_proto.h"
#include "RRC/NR_UE/rrc_proto.h"
...
...
openair2/LAYER2/NR_MAC_UE/proto.h
View file @
317ab77f
...
@@ -19,13 +19,17 @@
...
@@ -19,13 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
! \file LAYER2/MAC/
proto.h
/*
\file
proto.h
* \brief MAC functions prototypes for eNB and UE
* \brief MAC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \email navid.nikaein@eurecom.fr
* \version 0.1
* \version 1.0
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#ifndef __LAYER2_MAC_PROTO_H__
#ifndef __LAYER2_MAC_PROTO_H__
#define __LAYER2_MAC_PROTO_H__
#define __LAYER2_MAC_PROTO_H__
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
317ab77f
...
@@ -19,13 +19,13 @@
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file NR_IF_Module.c
/* \file NR_IF_Module.c
* \brief functions for NR UE FAPI-like interface
* \brief functions for NR UE FAPI-like interface
* \author R. Knopp
* \author R. Knopp
, K.H. HSU
* \date 2018
* \date 2018
* \version 0.1
* \version 0.1
* \company Eurecom
* \company Eurecom
/ NTUST
* \email: knopp@eurecom.fr
* \email: knopp@eurecom.fr
, kai-hsiang.hsu@eurecom.fr
* \note
* \note
* \warning
* \warning
*/
*/
...
@@ -102,7 +102,7 @@ nr_ue_if_module_t *nr_ue_if_module_init(uint32_t module_id){
...
@@ -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
));
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_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
];
return
nr_ue_if_module_inst
[
module_id
];
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
View file @
317ab77f
...
@@ -19,16 +19,17 @@
...
@@ -19,16 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file openair2/PHY_INTERFACE/IF_Module.h
/* \file NR_IF_Module.h
* \brief data structures for PHY/MAC interface modules
* \brief data structures for L1/L2 interface modules
* \author EURECOM/NTUST
* \author R. Knopp, K.H. HSU
* \date 2018
* \date 2018
* \version 0.1
* \version 0.1
* \company Eurecom
* \company Eurecom / NTUST
* \email: raymond.knopp@eurecom.fr
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \note
* \warning
* \warning
*/
*/
#ifndef __NR_IF_MODULE_H__
#ifndef __NR_IF_MODULE_H__
#define __NR_IF_MODULE_H__
#define __NR_IF_MODULE_H__
...
...
openair2/RRC/NR_UE/L2_interface_ue.c
View file @
317ab77f
...
@@ -19,13 +19,15 @@
...
@@ -19,13 +19,15 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
! \file l2_interfac
e.c
/*
\file l2_interface_u
e.c
* \brief layer 2 interface, used to support different RRC sublayer
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \author R. Knopp, K.H. HSU
* \date 2010-2014
* \date 2018
* \version 1.0
* \version 0.1
* \company Eurecom
* \company Eurecom / NTUST
* \email: raymond.knopp@eurecom.fr
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#include "rrc_defs.h"
#include "rrc_defs.h"
...
...
openair2/RRC/NR_UE/main_ue.c
View file @
317ab77f
/*
* 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 "defs.h"
#include "rrc_proto.h"
#include "rrc_proto.h"
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
317ab77f
...
@@ -19,13 +19,15 @@
...
@@ -19,13 +19,15 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file rrc_UE.c
/* \file rrc_UE.c
* \brief rrc procedures for UE
* \brief RRC procedures
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2011 - 2014
* \date 2018
* \version 1.0
* \version 0.1
* \company Eurecom
* \company Eurecom / NTUST
* \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
* \note
* \warning
*/
*/
#define RRC_UE
#define RRC_UE
...
...
openair2/RRC/NR_UE/rrc_defs.h
View file @
317ab77f
...
@@ -19,14 +19,16 @@
...
@@ -19,14 +19,16 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file RRC/LITE/defs.h
/* \file rrc_defs.h
* \brief RRC struct definitions and function prototypes
* \brief RRC structures/types definition
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \version 1.0
* \version 0.1
* \company Eurecom
* \company Eurecom / NTUST
* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
*/
* \note
* \warning
*/
#ifndef __OPENAIR_NR_RRC_DEFS_H__
#ifndef __OPENAIR_NR_RRC_DEFS_H__
#define __OPENAIR_NR_RRC_DEFS_H__
#define __OPENAIR_NR_RRC_DEFS_H__
...
...
openair2/RRC/NR_UE/rrc_list.h
View file @
317ab77f
/*
* 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_
#ifndef _RRC_LIST_H_
#define _RRC_LIST_H_
#define _RRC_LIST_H_
...
...
openair2/RRC/NR_UE/rrc_proto.h
View file @
317ab77f
...
@@ -19,17 +19,17 @@
...
@@ -19,17 +19,17 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*
!
\file proto.h
/* \file proto.h
* \brief RRC functions prototypes for eNB and UE
* \brief RRC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp
* \author R. Knopp, K.H. HSU
* \date 2010 - 2014
* \date 2018
* \email navid.nikaein@eurecom.fr
* \version 0.1
* \version 1.0
* \company Eurecom / NTUST
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
*/
* \note
/** \addtogroup _rrc
* \warning
* @{
*/
*/
#ifndef _RRC_PROTO_H_
#ifndef _RRC_PROTO_H_
#define _RRC_PROTO_H_
#define _RRC_PROTO_H_
...
...
openair2/RRC/NR_UE/rrc_vars.h
View file @
317ab77f
...
@@ -19,14 +19,16 @@
...
@@ -19,14 +19,16 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
/*! \file vars.hles
/* \file vars.h
* \brief rrc variables
* \brief RRC layer variables
* \author Raymond Knopp and Navid Nikaein
* \author R. Knopp, K.H. HSU
* \date 2013
* \date 2018
* \version 1.0
* \version 0.1
* \company Eurecom
* \company Eurecom / NTUST
* \email: navid.nikaein@eurecom.fr
* \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr
*/
* \note
* \warning
*/
#ifndef __OPENAIR_NR_RRC_VARS_H__
#ifndef __OPENAIR_NR_RRC_VARS_H__
...
...
targets/RT/USER/nr-ue.c
View file @
317ab77f
...
@@ -40,8 +40,8 @@
...
@@ -40,8 +40,8 @@
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
#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
//#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 "PHY/phy_extern_nr_ue.h"
//#include "LAYER2/NR_MAC_UE/extern.h"
#include "LAYER2/NR_MAC_UE/proto.h"
#include "LAYER2/NR_MAC_UE/proto.h"
#include "SCHED_NR/extern.h"
#include "SCHED_NR/extern.h"
...
@@ -220,6 +220,9 @@ void init_UE(int nb_inst)
...
@@ -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
]);
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
);
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
,
AssertFatal
(
0
==
pthread_create
(
&
UE
->
proc
.
pthread_ue
,
&
UE
->
proc
.
attr_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