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
canghaiwuhen
OpenXG-RAN
Commits
66b4c74f
Commit
66b4c74f
authored
4 years ago
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added MAC statistics (Transport and logical channel interfaces)
parent
37dcdeb3
develop
1
128-ues
256_QAM_demod
NR-PHY-MAC-IF-multi-UE
NR_10MHz
NR_CSI_reporting
NR_DL_sched_fixes
NR_DL_scheduler
NR_FAPI_beamindex_SSB_RO
NR_FR2_RA
NR_FR2_RRC_SSB
NR_MAC_Multi_Rach_GlobalEdge
NR_MAC_SSB_RO_GlobalEdge
NR_MAC_SSB_RO_UE_IDCC
NR_MAC_SSB_RO_merge
NR_MAC_TCI_UCI_GlobalEdge
NR_NGAP
NR_PUCCH_MultiUE
NR_RA_updates
NR_RRCConfiguration_FR2
NR_SA_NGAP_RRC
NR_SA_NGAP_RRC_wk42
NR_SA_itti_sim_wk48
NR_SRB_Config
NR_UE_MAC_scheduler
NR_UE_RA_fixes
NR_UE_UL_DCI_improvements
NR_UE_enable_parallelization
NR_UE_stability_fixes
NR_UL_scheduler
NR_UL_scheduler_rebased
NR_mac_uci_functions_rework
NR_scheduling_CSIRS
NR_scheduling_request
PUSCH_TA_update
RA_CI_test
UE_DL_DCI_hotfix
bch-fixes-bitmap
benetel_5g_prach_fix
benetel_phase_rotation
bugfix-nr-bands
bugfix-nr-ldpc-post-processing
bugfix-nr-ldpc-size-typo
bugfix-nr-pdcp-sn-size
bugfix-nr-rate-matching-assertion
cce_indexing_fix
cce_indexing_fix2
ci-deploy-docker-compose
ci-ul-iperf-from-trf-container
cleanup_softmodem_main
constant_power
develop-oriecpriupdates
develop-sib1
dfts_alternatives
dlsch_parallel
dongzhanyi-zte-develop2
feature/make-s1-mme-port-configurable
feature/make-s1-mme-port-configurable-with-astyle-fixes
finalize-oaicn-integration
fix-ci-tun
fix-itti-segv
fix_do_ra_data
fix_pdsch_low_prb
fix_rrc_x2_ticking
fixes-mac-sched-nfapi
fixes-mac-sched-tun
fixes-tun
flexran-apps
flexran-repair-mme-mgmt
fujitsu_lte_contribution
fujitsu_lte_contribution-128
harq-hotfix
hotfix-minor-remove-nr-rlc-cppcheck-error
hotfix-nr-rlc-tick
integration_2020_wk40
integration_2020_wk41
integration_2020_wk42_2
integration_2020_wk45
integration_2020_wk45_2
integration_2020_wk46
integration_2020_wk46_2
integration_2020_wk47
integration_2020_wk48
integration_2020_wk48_2
integration_2020_wk49
integration_2020_wk50
integration_2020_wk50_1
inter-RRU-final
ldpc-decoder-codegen2
ldpc_short_codeword_fixes
load_gnb
lte_uplink_improvement
mac-fixes-wk45_2
mosaic5g-oai-ran
mosaic5g-oai-sim
nfapi_nr_develop
ngap-dlul
ngap-w48-merge2
ngap-wf
ngap-wf-1120
ngap-wf-1120-srb
ngap-wf-1120-srb-gtp
ngap-wf-1120-srb-gtp-hs
ngap-wf-1120-srb-gtp-hs1
ngap-wf-1120-srb-gtp-hs2
ngap-wf-1203-yunsdr
ngap-wf-liuyu
ngap_lfq_1120
ngap_merge
noCore
nr-mac-pdu-wireshark
nr-mac-remove-ue-list
nr-rlc-am-bugfix-w44
nr-rlc-bugfix-w44
nrUE
nrUE-hs
nrUE-upper-layer
nr_bsr
nr_dl_dmrs_type2
nr_dl_pf
nr_dl_pf2
nr_dl_ul_ptrs
nr_fdd_if_fix
nr_prach_fr2
nr_ue_msg3
nr_ue_tti_cleanup
nsa-ue
nsa_remove_band_hardcodings
oai-sim
oc-docker-october-improvements
openxg/develop
ptrs_rrc_config
pusch-mthread-scaling-fix
ra-dl-ul
remove_nos1_hack_pdcp
remove_x2_gnb_hardcoding
repair-TA
revert_memcpy
rh_ci_fix_autoterminate
rh_ci_fr1_update
rh_ci_oc
rh_ci_py
rh_ci_rfsim_ra
rh_fr1_newjenkins
rh_fr1_update
rh_gnb_compile_fix
rh_wk50_debug
rlc-v2-bugfix-status-reporting
rlc-v2-tick
rrc-enb-phy-testmode
s1_subnormal
s1ap-bugfix-rab_setup
small-bugfixes-w40
testing_with_external_txdata
ul_dl_dci_same_slot
ulsch_decode_mthread
ulsim_changes
x2-endc-processing
yihongzheng_srb
No related merge requests found
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
80 additions
and
18 deletions
+80
-18
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+3
-7
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
+2
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+27
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+6
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+6
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+6
-1
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+14
-0
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+14
-8
No files found.
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
66b4c74f
...
@@ -142,19 +142,15 @@ void dump_pusch_stats(PHY_VARS_gNB *gNB) {
...
@@ -142,19 +142,15 @@ void dump_pusch_stats(PHY_VARS_gNB *gNB) {
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
if
(
gNB
->
ulsch
[
i
][
0
]
->
rnti
>
0
)
if
(
gNB
->
ulsch
[
i
][
0
]
->
rnti
>
0
)
LOG_I
(
PHY
,
"ULSCH RNTI %x: round_trials %d(%1.1e)
/%d(%1.1e)/%d(%1.1e)/%d/%d/%d/%d/%d, current_Qm %d, current_RI %d, total_bytes RX/TX
%d/%d
\n
"
,
LOG_I
(
PHY
,
"ULSCH RNTI %x: round_trials %d(%1.1e)
:%d(%1.1e):%d(%1.1e):%d, current_Qm %d, current_RI %d, total_bytes RX/SCHED
%d/%d
\n
"
,
gNB
->
ulsch
[
i
][
0
]
->
rnti
,
gNB
->
ulsch
[
i
][
0
]
->
rnti
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
1
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
1
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
1
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
1
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
2
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
1
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
2
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
2
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
2
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
3
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
2
],
(
double
)
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
3
]
/
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
0
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
3
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
3
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
4
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
5
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
6
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
round_trials
[
7
],
gNB
->
ulsch
[
i
][
0
]
->
stats
.
current_Qm
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
current_Qm
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
current_RI
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
current_RI
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
total_bytes_rx
,
gNB
->
ulsch
[
i
][
0
]
->
stats
.
total_bytes_rx
,
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_TRANSPORT/nr_ulsch.h
View file @
66b4c74f
...
@@ -88,4 +88,6 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB,
...
@@ -88,4 +88,6 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB,
uint8_t
harq_pid
);
uint8_t
harq_pid
);
int16_t
find_nr_ulsch
(
uint16_t
rnti
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
);
int16_t
find_nr_ulsch
(
uint16_t
rnti
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
);
void
dump_pusch_stats
(
PHY_VARS_gNB
*
gNB
);
void
clear_pusch_stats
(
PHY_VARS_gNB
*
gNB
);
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
66b4c74f
...
@@ -574,7 +574,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
...
@@ -574,7 +574,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
}
}
}
}
}
if
((
frame_rx
&
127
)
==
0
)
dump_pusch_stats
(
gNB
);
// figure out a better way to choose slot_rx, 19 is ok for a particular TDD configuration with 30kHz SCS
if
((
frame_rx
&
127
)
==
0
&&
slot_rx
==
19
)
dump_pusch_stats
(
gNB
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX
,
0
);
}
}
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
66b4c74f
...
@@ -62,6 +62,32 @@
...
@@ -62,6 +62,32 @@
const
uint8_t
slots_per_frame
[
5
]
=
{
10
,
20
,
40
,
80
,
160
};
const
uint8_t
slots_per_frame
[
5
]
=
{
10
,
20
,
40
,
80
,
160
};
uint16_t
nr_pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
uint16_t
nr_pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
void
clear_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
memset
((
void
*
)
gNB
->
UE_list
.
mac_stats
,
0
,
MAX_MOBILES_PER_GNB
*
sizeof
(
NR_mac_stats_t
));
}
void
dump_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
NR_UE_list_t
*
UE_list
=
&
gNB
->
UE_list
;
NR_mac_stats_t
*
stats
;
int
lc_id
;
for
(
int
UE_id
=
0
;
UE_id
<
MAX_MOBILES_PER_GNB
;
UE_id
++
)
{
if
(
UE_list
->
active
[
UE_id
]
==
TRUE
)
{
LOG_I
(
MAC
,
"UE %x
\n
"
,
UE_list
->
rnti
[
UE_id
]);
stats
=
&
UE_list
->
mac_stats
[
UE_id
];
LOG_I
(
MAC
,
"dlsch_rounds %d/%d/%d/%d, dlsch_errors %d
\n
"
,
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
);
LOG_I
(
MAC
,
"dlsch_total_bytes %d
\n
"
,
stats
->
dlsch_total_bytes
);
LOG_I
(
MAC
,
"ulsch_rounds %d/%d/%d/%d, ulsch_errors %d
\n
"
,
stats
->
ulsch_rounds
[
0
],
stats
->
ulsch_rounds
[
1
],
stats
->
ulsch_rounds
[
2
],
stats
->
ulsch_rounds
[
3
],
stats
->
ulsch_errors
);
LOG_I
(
MAC
,
"ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d
\n
"
,
stats
->
ulsch_total_bytes_scheduled
,
stats
->
ulsch_total_bytes_rx
);
for
(
lc_id
=
0
;
lc_id
<
63
;
lc_id
++
)
{
if
(
stats
->
lc_bytes_tx
[
lc_id
]
>
0
)
LOG_I
(
MAC
,
"LCID %d : %d bytes TX
\n
"
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
if
(
stats
->
lc_bytes_rx
[
lc_id
]
>
0
)
LOG_I
(
MAC
,
"LCID %d : %d bytes RX
\n
"
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
}
}
}
}
void
clear_nr_nfapi_information
(
gNB_MAC_INST
*
gNB
,
void
clear_nr_nfapi_information
(
gNB_MAC_INST
*
gNB
,
int
CC_idP
,
int
CC_idP
,
frame_t
frameP
,
frame_t
frameP
,
...
@@ -458,6 +484,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
...
@@ -458,6 +484,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
} //END for (i = 0; i < MAX_MOBILES_PER_GNB; i++)
} //END for (i = 0; i < MAX_MOBILES_PER_GNB; i++)
*/
*/
if
((
slot
==
0
)
&&
(
frame
&
127
)
==
0
)
dump_mac_stats
(
RC
.
nrmac
[
module_idP
]);
// This schedules MIB
// This schedules MIB
if
((
slot
==
0
)
&&
(
frame
&
7
)
==
0
){
if
((
slot
==
0
)
&&
(
frame
&
7
)
==
0
){
schedule_nr_mib
(
module_idP
,
frame
,
slot
);
schedule_nr_mib
(
module_idP
,
frame
,
slot
);
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
66b4c74f
...
@@ -76,6 +76,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
...
@@ -76,6 +76,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
//NR_CellGroupConfig_t *config = UE_list->secondaryCellGroup[UE_id];
//NR_CellGroupConfig_t *config = UE_list->secondaryCellGroup[UE_id];
ue_sched_ctl
=
&
(
UE_list
->
UE_sched_ctrl
[
UE_id
]);
ue_sched_ctl
=
&
(
UE_list
->
UE_sched_ctrl
[
UE_id
]);
NR_mac_stats_t
*
mac_stats
=
&
(
UE_list
->
mac_stats
[
UE_id
]);
// 1) Compute MAC CE and related subheaders
// 1) Compute MAC CE and related subheaders
// DRX command subheader (MAC CE size 0)
// DRX command subheader (MAC CE size 0)
...
@@ -112,6 +114,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
...
@@ -112,6 +114,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
memcpy
((
void
*
)
mac_pdu_ptr
,
(
void
*
)
ce_ptr
,
mac_ce_size
);
memcpy
((
void
*
)
mac_pdu_ptr
,
(
void
*
)
ce_ptr
,
mac_ce_size
);
ce_ptr
+=
mac_ce_size
;
ce_ptr
+=
mac_ce_size
;
mac_pdu_ptr
+=
(
unsigned
char
)
mac_ce_size
;
mac_pdu_ptr
+=
(
unsigned
char
)
mac_ce_size
;
}
}
// Contention resolution fixed subheader and MAC CE
// Contention resolution fixed subheader and MAC CE
...
@@ -324,6 +328,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
...
@@ -324,6 +328,8 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
memcpy
((
void
*
)
mac_pdu_ptr
,
(
void
*
)
dlsch_buffer_ptr
,
sdu_lengths
[
i
]);
memcpy
((
void
*
)
mac_pdu_ptr
,
(
void
*
)
dlsch_buffer_ptr
,
sdu_lengths
[
i
]);
dlsch_buffer_ptr
+=
sdu_lengths
[
i
];
dlsch_buffer_ptr
+=
sdu_lengths
[
i
];
mac_pdu_ptr
+=
sdu_lengths
[
i
];
mac_pdu_ptr
+=
sdu_lengths
[
i
];
mac_stats
->
lc_bytes_tx
[
sdu_lcids
[
i
]]
+=
sdu_lengths
[
i
];
}
}
// 4) Compute final offset for padding
// 4) Compute final offset for padding
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
66b4c74f
...
@@ -320,7 +320,7 @@ int configure_fapi_dl_pdu(int Mod_idP,
...
@@ -320,7 +320,7 @@ int configure_fapi_dl_pdu(int Mod_idP,
pdsch_pdu_rel15
->
nrOfLayers
=
1
;
pdsch_pdu_rel15
->
nrOfLayers
=
1
;
pdsch_pdu_rel15
->
transmissionScheme
=
0
;
pdsch_pdu_rel15
->
transmissionScheme
=
0
;
pdsch_pdu_rel15
->
refPoint
=
0
;
// Point A
pdsch_pdu_rel15
->
refPoint
=
0
;
// Point A
UE_list
->
mac_stats
[
UE_id
].
dlsch_rounds
[
UE_list
->
UE_sched_ctrl
[
UE_id
].
harq_processes
[
current_harq_pid
].
round
]
++
;
pdsch_pdu_rel15
->
dmrsConfigType
=
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
dmrs_DownlinkForPDSCH_MappingTypeA
->
choice
.
setup
->
dmrs_Type
==
NULL
?
0
:
1
;
pdsch_pdu_rel15
->
dmrsConfigType
=
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
dmrs_DownlinkForPDSCH_MappingTypeA
->
choice
.
setup
->
dmrs_Type
==
NULL
?
0
:
1
;
pdsch_pdu_rel15
->
dlDmrsScramblingId
=
*
scc
->
physCellId
;
pdsch_pdu_rel15
->
dlDmrsScramblingId
=
*
scc
->
physCellId
;
pdsch_pdu_rel15
->
SCID
=
0
;
pdsch_pdu_rel15
->
SCID
=
0
;
...
@@ -455,6 +455,9 @@ int configure_fapi_dl_pdu(int Mod_idP,
...
@@ -455,6 +455,9 @@ int configure_fapi_dl_pdu(int Mod_idP,
// Hardcode it for now
// Hardcode it for now
TBS
=
dl_tti_pdsch_pdu
->
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
];
TBS
=
dl_tti_pdsch_pdu
->
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
];
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
harq_processes
[
current_harq_pid
].
round
==
0
)
UE_list
->
mac_stats
[
UE_id
].
dlsch_total_bytes
+=
TBS
;
LOG_D
(
MAC
,
"DLSCH PDU: start PRB %d n_PRB %d startSymbolAndLength %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d
\n
"
,
LOG_D
(
MAC
,
"DLSCH PDU: start PRB %d n_PRB %d startSymbolAndLength %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d
\n
"
,
pdsch_pdu_rel15
->
rbStart
,
pdsch_pdu_rel15
->
rbStart
,
pdsch_pdu_rel15
->
rbSize
,
pdsch_pdu_rel15
->
rbSize
,
...
@@ -1031,6 +1034,8 @@ void schedule_fapi_ul_pdu(int Mod_idP,
...
@@ -1031,6 +1034,8 @@ void schedule_fapi_ul_pdu(int Mod_idP,
0
,
0
,
pusch_pdu
->
nrOfLayers
)
>>
3
;
pusch_pdu
->
nrOfLayers
)
>>
3
;
UE_list
->
mac_stats
[
UE_id
].
ulsch_rounds
[
cur_harq
->
round
]
++
;
if
(
cur_harq
->
round
==
0
)
UE_list
->
mac_stats
[
UE_id
].
ulsch_total_bytes_scheduled
+=
pusch_pdu
->
pusch_data
.
tb_size
;
pusch_pdu
->
pusch_data
.
num_cb
=
0
;
//CBG not supported
pusch_pdu
->
pusch_data
.
num_cb
=
0
;
//CBG not supported
//pusch_pdu->pusch_data.cb_present_and_position;
//pusch_pdu->pusch_data.cb_present_and_position;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
66b4c74f
...
@@ -211,7 +211,8 @@ void nr_process_mac_pdu(
...
@@ -211,7 +211,8 @@ void nr_process_mac_pdu(
}
}
LOG_D
(
MAC
,
"[UE %d] Frame %d : ULSCH -> UL-DTCH %d (gNB %d, %d bytes)
\n
"
,
module_idP
,
frameP
,
rx_lcid
,
module_idP
,
mac_sdu_len
);
LOG_D
(
MAC
,
"[UE %d] Frame %d : ULSCH -> UL-DTCH %d (gNB %d, %d bytes)
\n
"
,
module_idP
,
frameP
,
rx_lcid
,
module_idP
,
mac_sdu_len
);
int
UE_id
=
find_nr_UE_id
(
module_idP
,
rnti
);
RC
.
nrmac
[
module_idP
]
->
UE_list
.
mac_stats
[
UE_id
].
lc_bytes_rx
[
rx_lcid
]
+=
mac_sdu_len
;
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
LOG_T
(
MAC
,
"[UE %d] First 32 bytes of DLSCH :
\n
"
,
module_idP
);
LOG_T
(
MAC
,
"[UE %d] First 32 bytes of DLSCH :
\n
"
,
module_idP
);
...
@@ -291,6 +292,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
...
@@ -291,6 +292,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
if
(
UE_id
!=
-
1
)
{
if
(
UE_id
!=
-
1
)
{
UE_scheduling_control
=
&
(
UE_list
->
UE_sched_ctrl
[
UE_id
]);
UE_scheduling_control
=
&
(
UE_list
->
UE_sched_ctrl
[
UE_id
]);
UE_list
->
mac_stats
[
UE_id
].
ulsch_total_bytes_rx
+=
sdu_lenP
;
LOG_D
(
MAC
,
"[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d
\n
"
,
LOG_D
(
MAC
,
"[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d
\n
"
,
gnb_mod_idP
,
gnb_mod_idP
,
harq_pid
,
harq_pid
,
...
@@ -326,6 +328,9 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
...
@@ -326,6 +328,9 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
LOG_D
(
MAC
,
"Received PDU at MAC gNB
\n
"
);
LOG_D
(
MAC
,
"Received PDU at MAC gNB
\n
"
);
nr_process_mac_pdu
(
gnb_mod_idP
,
current_rnti
,
CC_idP
,
frameP
,
sduP
,
sdu_lenP
);
nr_process_mac_pdu
(
gnb_mod_idP
,
current_rnti
,
CC_idP
,
frameP
,
sduP
,
sdu_lenP
);
}
}
else
{
}
}
}
else
{
else
{
// random access pusch with TC-RNTI
// random access pusch with TC-RNTI
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
66b4c74f
...
@@ -304,11 +304,25 @@ typedef struct NR_preamble_ue {
...
@@ -304,11 +304,25 @@ typedef struct NR_preamble_ue {
uint8_t
*
preamble_list
;
uint8_t
*
preamble_list
;
}
NR_preamble_ue
;
}
NR_preamble_ue
;
typedef
struct
{
int
lc_bytes_tx
[
64
];
int
lc_bytes_rx
[
64
];
int
dlsch_rounds
[
8
];
int
dlsch_errors
;
int
dlsch_total_bytes
;
int
ulsch_rounds
[
8
];
int
ulsch_errors
;
int
ulsch_total_bytes_scheduled
;
int
ulsch_total_bytes_rx
;
}
NR_mac_stats_t
;
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
typedef
struct
{
typedef
struct
{
DLSCH_PDU
DLSCH_pdu
[
4
][
MAX_MOBILES_PER_GNB
];
DLSCH_PDU
DLSCH_pdu
[
4
][
MAX_MOBILES_PER_GNB
];
/// scheduling control info
/// scheduling control info
NR_UE_sched_ctrl_t
UE_sched_ctrl
[
MAX_MOBILES_PER_GNB
];
NR_UE_sched_ctrl_t
UE_sched_ctrl
[
MAX_MOBILES_PER_GNB
];
NR_mac_stats_t
mac_stats
[
MAX_MOBILES_PER_GNB
];
int
next
[
MAX_MOBILES_PER_GNB
];
int
next
[
MAX_MOBILES_PER_GNB
];
int
head
;
int
head
;
int
next_ul
[
MAX_MOBILES_PER_GNB
];
int
next_ul
[
MAX_MOBILES_PER_GNB
];
...
...
This diff is collapsed.
Click to expand it.
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
View file @
66b4c74f
...
@@ -83,6 +83,8 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
...
@@ -83,6 +83,8 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
int
max_harq_rounds
=
4
;
// TODO define macro
int
max_harq_rounds
=
4
;
// TODO define macro
int
num_ucis
=
UL_info
->
uci_ind
.
num_ucis
;
int
num_ucis
=
UL_info
->
uci_ind
.
num_ucis
;
nfapi_nr_uci_t
*
uci_list
=
UL_info
->
uci_ind
.
uci_list
;
nfapi_nr_uci_t
*
uci_list
=
UL_info
->
uci_ind
.
uci_list
;
uint16_t
rnti
;
int
UE_id
;
for
(
int
i
=
0
;
i
<
num_ucis
;
i
++
)
{
for
(
int
i
=
0
;
i
<
num_ucis
;
i
++
)
{
switch
(
uci_list
[
i
].
pdu_type
)
{
switch
(
uci_list
[
i
].
pdu_type
)
{
...
@@ -93,6 +95,9 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
...
@@ -93,6 +95,9 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
nfapi_nr_uci_pucch_pdu_format_0_1_t
*
uci_pdu
=
&
uci_list
[
i
].
pucch_pdu_format_0_1
;
nfapi_nr_uci_pucch_pdu_format_0_1_t
*
uci_pdu
=
&
uci_list
[
i
].
pucch_pdu_format_0_1
;
// handle harq
// handle harq
int
harq_idx_s
=
0
;
int
harq_idx_s
=
0
;
rnti
=
uci_pdu
->
rnti
;
UE_id
=
find_nr_UE_id
(
0
,
rnti
);
sched_ctrl
+=
UE_id
;
// tpc (power control)
// tpc (power control)
sched_ctrl
->
tpc1
=
nr_get_tpc
(
target_snrx10
,
uci_pdu
->
ul_cqi
,
30
);
sched_ctrl
->
tpc1
=
nr_get_tpc
(
target_snrx10
,
uci_pdu
->
ul_cqi
,
30
);
// iterate over received harq bits
// iterate over received harq bits
...
@@ -137,11 +142,13 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
...
@@ -137,11 +142,13 @@ void handle_nr_uci(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl, int tar
UL_info
->
uci_ind
.
num_ucis
=
0
;
UL_info
->
uci_ind
.
num_ucis
=
0
;
}
}
void
handle_nr_ul_harq
(
uint16_t
slot
,
NR_UE_sched_ctrl_t
*
sched_ctrl
,
nfapi_nr_crc_t
crc_pdu
)
{
void
handle_nr_ul_harq
(
uint16_t
slot
,
NR_UE_sched_ctrl_t
*
sched_ctrl
,
NR_mac_stats_t
*
stats
,
nfapi_nr_crc_t
crc_pdu
)
{
int
max_harq_rounds
=
4
;
// TODO define macro
int
max_harq_rounds
=
4
;
// TODO define macro
uint8_t
hrq_id
=
crc_pdu
.
harq_id
;
uint8_t
hrq_id
=
crc_pdu
.
harq_id
;
NR_UE_ul_harq_t
*
cur_harq
=
&
sched_ctrl
->
ul_harq_processes
[
hrq_id
];
NR_UE_ul_harq_t
*
cur_harq
=
&
sched_ctrl
->
ul_harq_processes
[
hrq_id
];
int
UE_id
=
find_nr_UE_id
(
0
,
crc_pdu
.
rnti
);
stats
+=
UE_id
;
if
(
cur_harq
->
state
==
ACTIVE_SCHED
)
{
if
(
cur_harq
->
state
==
ACTIVE_SCHED
)
{
if
(
!
crc_pdu
.
tb_crc_status
)
{
if
(
!
crc_pdu
.
tb_crc_status
)
{
cur_harq
->
ndi
^=
1
;
cur_harq
->
ndi
^=
1
;
...
@@ -162,9 +169,8 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, nfapi_nr_c
...
@@ -162,9 +169,8 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, nfapi_nr_c
cur_harq
->
ndi
^=
1
;
cur_harq
->
ndi
^=
1
;
cur_harq
->
state
=
INACTIVE
;
// failed after 4 rounds -> make inactive
cur_harq
->
state
=
INACTIVE
;
// failed after 4 rounds -> make inactive
cur_harq
->
round
=
0
;
cur_harq
->
round
=
0
;
#ifdef UL_HARQ_PRINT
LOG_D
(
MAC
,
"[HARQ HANDLER] RNTI %x: Ulharq id %d crc failed in all round, freeing it for scheduler
\n
"
,
crc_pdu
.
rnti
,
hrq_id
);
printf
(
"[HARQ HANDLER] Ulharq id %d crc failed in all round, freeing it for scheduler
\n
"
,
hrq_id
);
stats
->
ulsch_errors
++
;
#endif
}
}
return
;
return
;
}
else
}
else
...
@@ -172,7 +178,7 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, nfapi_nr_c
...
@@ -172,7 +178,7 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, nfapi_nr_c
}
}
void
handle_nr_ulsch
(
NR_UL_IND_t
*
UL_info
,
NR_UE_sched_ctrl_t
*
sched_ctrl
)
{
void
handle_nr_ulsch
(
NR_UL_IND_t
*
UL_info
,
NR_UE_sched_ctrl_t
*
sched_ctrl
,
NR_mac_stats_t
*
stats
)
{
if
(
nfapi_mode
==
1
)
{
if
(
nfapi_mode
==
1
)
{
if
(
UL_info
->
crc_ind
.
number_crcs
>
0
)
{
if
(
UL_info
->
crc_ind
.
number_crcs
>
0
)
{
//LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf));
//LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf));
...
@@ -199,7 +205,7 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl) {
...
@@ -199,7 +205,7 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info, NR_UE_sched_ctrl_t *sched_ctrl) {
UL_info
->
rx_ind
.
pdu_list
[
i
].
rnti
)
{
UL_info
->
rx_ind
.
pdu_list
[
i
].
rnti
)
{
LOG_D
(
PHY
,
"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d
\n
"
,
j
,
UL_info
->
crc_ind
.
crc_list
[
j
].
tb_crc_status
);
LOG_D
(
PHY
,
"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d
\n
"
,
j
,
UL_info
->
crc_ind
.
crc_list
[
j
].
tb_crc_status
);
handle_nr_ul_harq
(
UL_info
->
slot
,
sched_ctrl
,
UL_info
->
crc_ind
.
crc_list
[
j
]);
handle_nr_ul_harq
(
UL_info
->
slot
,
sched_ctrl
,
stats
,
UL_info
->
crc_ind
.
crc_list
[
j
]);
if
(
UL_info
->
crc_ind
.
crc_list
[
j
].
tb_crc_status
==
1
)
{
// CRC error indication
if
(
UL_info
->
crc_ind
.
crc_list
[
j
].
tb_crc_status
==
1
)
{
// CRC error indication
LOG_D
(
MAC
,
"Frame %d, Slot %d Calling rx_sdu (CRC error)
\n
"
,
UL_info
->
frame
,
UL_info
->
slot
);
LOG_D
(
MAC
,
"Frame %d, Slot %d Calling rx_sdu (CRC error)
\n
"
,
UL_info
->
frame
,
UL_info
->
slot
);
...
@@ -253,7 +259,6 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
...
@@ -253,7 +259,6 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
NR_Sched_Rsp_t
*
sched_info
=
&
Sched_INFO
[
module_id
][
CC_id
];
NR_Sched_Rsp_t
*
sched_info
=
&
Sched_INFO
[
module_id
][
CC_id
];
NR_IF_Module_t
*
ifi
=
if_inst
[
module_id
];
NR_IF_Module_t
*
ifi
=
if_inst
[
module_id
];
gNB_MAC_INST
*
mac
=
RC
.
nrmac
[
module_id
];
gNB_MAC_INST
*
mac
=
RC
.
nrmac
[
module_id
];
LOG_D
(
PHY
,
"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rach_pdus:%d rx_ind:%d crcs:%d]
\n
"
,
LOG_D
(
PHY
,
"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rach_pdus:%d rx_ind:%d crcs:%d]
\n
"
,
UL_info
->
frame
,
UL_info
->
slot
,
UL_info
->
frame
,
UL_info
->
slot
,
module_id
,
CC_id
,
UL_info
->
rach_ind
.
number_of_pdus
,
module_id
,
CC_id
,
UL_info
->
rach_ind
.
number_of_pdus
,
...
@@ -274,10 +279,11 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
...
@@ -274,10 +279,11 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
// clear DL/UL info for new scheduling round
// clear DL/UL info for new scheduling round
clear_nr_nfapi_information
(
mac
,
CC_id
,
UL_info
->
frame
,
UL_info
->
slot
);
clear_nr_nfapi_information
(
mac
,
CC_id
,
UL_info
->
frame
,
UL_info
->
slot
);
handle_nr_rach
(
UL_info
);
handle_nr_rach
(
UL_info
);
handle_nr_uci
(
UL_info
,
&
mac
->
UE_list
.
UE_sched_ctrl
[
0
],
mac
->
pucch_target_snrx10
);
handle_nr_uci
(
UL_info
,
&
mac
->
UE_list
.
UE_sched_ctrl
[
0
],
mac
->
pucch_target_snrx10
);
// clear HI prior to handling ULSCH
// clear HI prior to handling ULSCH
mac
->
UL_dci_req
[
CC_id
].
numPdus
=
0
;
mac
->
UL_dci_req
[
CC_id
].
numPdus
=
0
;
handle_nr_ulsch
(
UL_info
,
&
mac
->
UE_list
.
UE_sched_ctrl
[
0
]);
handle_nr_ulsch
(
UL_info
,
&
mac
->
UE_list
.
UE_sched_ctrl
[
0
]
,
&
mac
->
UE_list
.
mac_stats
[
0
]
);
if
(
nfapi_mode
!=
1
)
{
if
(
nfapi_mode
!=
1
)
{
if
(
ifi
->
CC_mask
==
((
1
<<
MAX_NUM_CCs
)
-
1
))
{
if
(
ifi
->
CC_mask
==
((
1
<<
MAX_NUM_CCs
)
-
1
))
{
...
...
This diff is collapsed.
Click to expand it.
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