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
lizhongxiao
OpenXG-RAN
Commits
e8e618ea
Commit
e8e618ea
authored
Oct 25, 2023
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
uci on pusch at MAC UE
parent
dea7d681
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
97 additions
and
15 deletions
+97
-15
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+1
-0
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+1
-1
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+1
-1
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+94
-13
No files found.
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
e8e618ea
...
...
@@ -342,6 +342,7 @@ typedef struct
uint8_t
nr_of_symbols
;
uint32_t
tbslbrm
;
uint8_t
ldpcBaseGraph
;
uint8_t
ulsch_indicator
;
//Optional Data only included if indicated in pduBitmap
nfapi_nr_ue_pusch_data_t
pusch_data
;
nfapi_nr_ue_pusch_uci_t
pusch_uci
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
e8e618ea
...
...
@@ -135,7 +135,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
AssertFatal
(
pusch_pdu
->
pusch_uci
.
harq_ack_bit_length
==
0
&&
pusch_pdu
->
pusch_uci
.
csi_part1_bit_length
==
0
&&
pusch_pdu
->
pusch_uci
.
csi_part2_bit_length
==
0
,
"UCI on PUSCH not supported
\n
"
);
"UCI on PUSCH not supported
at PHY
\n
"
);
int
start_symbol
=
pusch_pdu
->
start_symbol_index
;
uint16_t
ul_dmrs_symb_pos
=
pusch_pdu
->
ul_dmrs_symb_pos
;
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
e8e618ea
...
...
@@ -396,7 +396,7 @@ and fills the PRACH PDU per each FD occasion.
@param slotP Slot index
@returns void
*/
void
nr_ue_pucch_scheduler
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frameP
,
int
slotP
,
void
*
phy_data
);
void
nr_ue_pucch_scheduler
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frameP
,
int
slotP
);
void
nr_schedule_csirs_reception
(
NR_UE_MAC_INST_t
*
mac
,
int
frame
,
int
slot
);
void
nr_schedule_csi_for_im
(
NR_UE_MAC_INST_t
*
mac
,
int
frame
,
int
slot
);
void
schedule_ta_command
(
fapi_nr_dl_config_request_t
*
dl_config
,
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
e8e618ea
...
...
@@ -545,7 +545,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
pusch_config_pdu
->
tbslbrm
=
0
;
}
else
if
(
dci
)
{
pusch_config_pdu
->
ulsch_indicator
=
dci
->
ulsch_indicator
;
if
(
dci
->
csi_request
.
nbits
>
0
&&
dci
->
csi_request
.
val
>
0
)
{
AssertFatal
(
csi_report
,
"CSI report needs to be present in case of CSI request
\n
"
);
pusch_config_pdu
->
pusch_uci
.
csi_part1_bit_length
=
csi_report
->
p1_bits
;
...
...
@@ -1165,6 +1165,10 @@ void nr_ue_ul_scheduler(NR_UE_MAC_INST_t *mac, nr_uplink_indication_t *ul_info)
ulcfg_pdu
++
;
}
release_ul_config
(
ulcfg_pdu
,
false
);
if
(
mac
->
state
>=
UE_PERFORMING_RA
)
nr_ue_pucch_scheduler
(
mac
,
frame_tx
,
slot_tx
);
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
)
{
LOG_D
(
NR_MAC
,
"3# scheduled_response transmitted,%d, %d
\n
"
,
frame_tx
,
slot_tx
);
nr_scheduled_response_t
scheduled_response
=
{.
ul_config
=
mac
->
ul_config_request
+
slot_tx
,
...
...
@@ -1220,9 +1224,6 @@ void nr_ue_ul_scheduler(NR_UE_MAC_INST_t *mac, nr_uplink_indication_t *ul_info)
mac
->
BSR_reporting_active
|=
NR_BSR_TRIGGER_REGULAR
;
LOG_D
(
NR_MAC
,
"[UE %d][BSR] Regular BSR Triggered Frame %d slot %d SR for PUSCH is pending
\n
"
,
mac
->
ue_id
,
frame_tx
,
slot_tx
);
}
if
(
mac
->
state
>=
UE_PERFORMING_RA
)
nr_ue_pucch_scheduler
(
mac
,
frame_tx
,
slot_tx
,
ul_info
->
phy_data
);
}
bool
nr_update_bsr
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frameP
,
slot_t
slotP
,
uint8_t
gNB_index
)
...
...
@@ -2192,7 +2193,89 @@ void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac)
LOG_D
(
NR_MAC
,
"Map SSB to RO done
\n
"
);
}
void
nr_ue_pucch_scheduler
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frameP
,
int
slotP
,
void
*
phy_data
)
static
bool
schedule_uci_on_pusch
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frame_tx
,
int
slot_tx
,
PUCCH_sched_t
*
pucch
)
{
fapi_nr_ul_config_request_pdu_t
*
ulcfg_pdu
=
lockGet_ul_iterator
(
mac
,
frame_tx
,
slot_tx
);
if
(
!
ulcfg_pdu
)
return
NULL
;
nfapi_nr_ue_pusch_pdu_t
*
pusch_pdu
=
NULL
;
while
(
ulcfg_pdu
->
pdu_type
!=
FAPI_NR_END
)
{
if
(
ulcfg_pdu
->
pdu_type
==
FAPI_NR_UL_CONFIG_TYPE_PUSCH
)
{
int
start_pusch
=
ulcfg_pdu
->
pusch_config_pdu
.
start_symbol_index
;
int
nsymb_pusch
=
ulcfg_pdu
->
pusch_config_pdu
.
nr_of_symbols
;
int
end_pusch
=
start_pusch
+
nsymb_pusch
;
NR_PUCCH_Resource_t
*
pucchres
=
pucch
->
pucch_resource
;
int
nr_of_symbols
=
0
;
int
start_symbol_index
=
0
;
switch
(
pucchres
->
format
.
present
)
{
case
NR_PUCCH_Resource__format_PR_format0
:
nr_of_symbols
=
pucchres
->
format
.
choice
.
format0
->
nrofSymbols
;
start_symbol_index
=
pucchres
->
format
.
choice
.
format0
->
startingSymbolIndex
;
break
;
case
NR_PUCCH_Resource__format_PR_format1
:
nr_of_symbols
=
pucchres
->
format
.
choice
.
format1
->
nrofSymbols
;
start_symbol_index
=
pucchres
->
format
.
choice
.
format1
->
startingSymbolIndex
;
break
;
case
NR_PUCCH_Resource__format_PR_format2
:
nr_of_symbols
=
pucchres
->
format
.
choice
.
format2
->
nrofSymbols
;
start_symbol_index
=
pucchres
->
format
.
choice
.
format2
->
startingSymbolIndex
;
break
;
case
NR_PUCCH_Resource__format_PR_format3
:
nr_of_symbols
=
pucchres
->
format
.
choice
.
format3
->
nrofSymbols
;
start_symbol_index
=
pucchres
->
format
.
choice
.
format3
->
startingSymbolIndex
;
break
;
case
NR_PUCCH_Resource__format_PR_format4
:
nr_of_symbols
=
pucchres
->
format
.
choice
.
format4
->
nrofSymbols
;
start_symbol_index
=
pucchres
->
format
.
choice
.
format4
->
startingSymbolIndex
;
break
;
default
:
AssertFatal
(
false
,
"Undefined PUCCH format
\n
"
);
}
int
final_symbol
=
nr_of_symbols
+
start_symbol_index
;
// PUCCH overlapping in time with PUSCH
if
(
start_symbol_index
<
end_pusch
&&
final_symbol
>
start_pusch
)
{
pusch_pdu
=
&
ulcfg_pdu
->
pusch_config_pdu
;
break
;
}
}
ulcfg_pdu
++
;
}
if
(
!
pusch_pdu
)
{
release_ul_config
(
ulcfg_pdu
,
false
);
return
false
;
}
// If a UE would transmit on a serving cell a PUSCH without UL-SCH that overlaps with a PUCCH transmission
// on a serving cell that includes positive SR information, the UE does not transmit the PUSCH.
if
(
pusch_pdu
&&
pusch_pdu
->
ulsch_indicator
==
0
&&
pucch
->
sr_payload
==
1
)
{
release_ul_config
(
ulcfg_pdu
,
false
);
return
false
;
}
// - UE multiplexes only HARQ-ACK information, if any, from the UCI in the PUSCH transmission
// and does not transmit the PUCCH if the UE multiplexes aperiodic or semi-persistent CSI reports in the PUSCH
// - UE multiplexes only HARQ-ACK information and CSI reports, if any, from the UCI in the PUSCH transmission
// and does not transmit the PUCCH if the UE does not multiplex aperiodic or semi-persistent CSI reports in the PUSCH
bool
mux_done
=
false
;
if
(
pucch
->
n_harq
>
0
)
{
pusch_pdu
->
pusch_uci
.
harq_ack_bit_length
=
pucch
->
n_harq
;
pusch_pdu
->
pusch_uci
.
harq_payload
=
pucch
->
ack_payload
;
mux_done
=
true
;
}
if
(
pusch_pdu
->
pusch_uci
.
csi_part1_bit_length
==
0
&&
pusch_pdu
->
pusch_uci
.
csi_part2_bit_length
==
0
)
{
// To support this we would need to shift some bits into CSI part2 -> need to change the logic
AssertFatal
(
pucch
->
n_csi
==
0
,
"Multiplexing periodic CSI on PUSCH not supported
\n
"
);
}
release_ul_config
(
ulcfg_pdu
,
false
);
// only use PUSCH if any mux is done otherwise send PUCCH
return
mux_done
;
}
void
nr_ue_pucch_scheduler
(
NR_UE_MAC_INST_t
*
mac
,
frame_t
frameP
,
int
slotP
)
{
PUCCH_sched_t
pucch
[
3
]
=
{
0
};
// TODO the size might change in the future in case of multiple SR or multiple CSI in a slot
...
...
@@ -2229,6 +2312,7 @@ void nr_ue_pucch_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, int slotP, voi
if
(
num_res
>
1
)
multiplex_pucch_resource
(
mac
,
pucch
,
num_res
);
for
(
int
j
=
0
;
j
<
num_res
;
j
++
)
{
if
(
pucch
[
j
].
n_harq
+
pucch
[
j
].
n_sr
+
pucch
[
j
].
n_csi
!=
0
)
{
LOG_D
(
NR_MAC
,
...
...
@@ -2241,6 +2325,11 @@ void nr_ue_pucch_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, int slotP, voi
mac
->
nr_ue_emul_l1
.
num_srs
=
pucch
[
j
].
n_sr
;
mac
->
nr_ue_emul_l1
.
num_harqs
=
pucch
[
j
].
n_harq
;
mac
->
nr_ue_emul_l1
.
num_csi_reports
=
pucch
[
j
].
n_csi
;
// checking if we need to schedule pucch[j] on PUSCH
if
(
schedule_uci_on_pusch
(
mac
,
frameP
,
slotP
,
&
pucch
[
j
]))
continue
;
fapi_nr_ul_config_request_pdu_t
*
pdu
=
lockGet_ul_config
(
mac
,
frameP
,
slotP
,
FAPI_NR_UL_CONFIG_TYPE_PUCCH
);
if
(
!
pdu
)
{
LOG_E
(
NR_MAC
,
"Error in pucch allocation
\n
"
);
...
...
@@ -2256,14 +2345,6 @@ void nr_ue_pucch_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, int slotP, voi
remove_ul_config_last_item
(
pdu
);
release_ul_config
(
pdu
,
false
);
}
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
)
{
nr_scheduled_response_t
scheduled_response
=
{.
ul_config
=
mac
->
ul_config_request
+
slotP
,
.
mac
=
mac
,
.
module_id
=
mac
->
ue_id
,
.
CC_id
=
0
/*TBR fix*/
,
.
phy_data
=
phy_data
};
mac
->
if_module
->
scheduled_response
(
&
scheduled_response
);
}
}
}
...
...
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