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
c04cf6ce
Commit
c04cf6ce
authored
Nov 25, 2020
by
kn.raju
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Review comments incorporated
parent
88bbbe0a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
90 additions
and
54 deletions
+90
-54
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+8
-7
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+79
-40
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+0
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+1
-6
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+2
-0
No files found.
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
c04cf6ce
...
...
@@ -378,6 +378,7 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
for
(;
ra_index
<
NR_NB_RA_PROC_MAX
;
ra_index
++
)
{
if
(
cc
->
ra
[
ra_index
].
state
==
RA_IDLE
)
break
;
}
if
(
ra_index
==
NR_NB_RA_PROC_MAX
)
LOG_E
(
MAC
,
"%s() %s:%d RA processes are not available for CFRA RNTI :%x
\n
"
,
__FUNCTION__
,
__FILE__
,
__LINE__
,
rnti
);
NR_RA_t
*
ra
=
&
cc
->
ra
[
ra_index
];
ra
->
secondaryCellGroup
=
secondaryCellGroup
;
if
(
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
!=
NULL
)
{
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
c04cf6ce
...
...
@@ -144,6 +144,38 @@ void find_SSB_and_RO_available(module_id_t module_idP) {
uint8_t
num_active_ssb
=
0
;
uint8_t
max_association_period
=
1
;
struct
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB
*
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
;
switch
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
){
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth
:
cc
->
cb_preambles_per_ssb
=
4
*
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneEighth
+
1
);
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth
:
cc
->
cb_preambles_per_ssb
=
4
*
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneFourth
+
1
);
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf
:
cc
->
cb_preambles_per_ssb
=
4
*
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneHalf
+
1
);
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one
:
cc
->
cb_preambles_per_ssb
=
4
*
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
one
+
1
);
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two
:
cc
->
cb_preambles_per_ssb
=
4
*
(
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
two
+
1
);
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four
:
cc
->
cb_preambles_per_ssb
=
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
four
;
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight
:
cc
->
cb_preambles_per_ssb
=
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
eight
;
break
;
case
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen
:
cc
->
cb_preambles_per_ssb
=
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
sixteen
;
break
;
default:
AssertFatal
(
1
==
0
,
"Unsupported ssb_perRACH_config %d
\n
"
,
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
);
break
;
}
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
)
mu
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
;
else
...
...
@@ -421,9 +453,23 @@ void nr_initiate_ra_proc(module_id_t module_idP,
gNB_MAC_INST
*
nr_mac
=
RC
.
nrmac
[
module_idP
];
NR_COMMON_channels_t
*
cc
=
&
nr_mac
->
common_channels
[
CC_id
];
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
for
(
int
i
=
0
;
i
<
NR_NB_RA_PROC_MAX
;
i
++
)
{
// if the preamble received correspond to one of the listed
uint8_t
total_RApreambles
=
64
;
uint8_t
num_ssb_per_RO
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
!=
NULL
)
total_RApreambles
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
;
if
(
num_ssb_per_RO
>
3
)
{
/*num of ssb per RO >= 1*/
num_ssb_per_RO
-=
3
;
total_RApreambles
=
total_RApreambles
/
num_ssb_per_RO
;
}
for
(
int
i
=
0
;
i
<
NR_NB_RA_PROC_MAX
;
i
++
)
{
NR_RA_t
*
ra
=
&
cc
->
ra
[
i
];
if
(
ra
->
state
==
RA_IDLE
)
{
if
((
preamble_index
<
total_RApreambles
)
&&
(
preamble_index
>
cc
->
cb_preambles_per_ssb
)
&&
(
!
ra
->
cfra
))
continue
;
uint16_t
ra_rnti
;
// ra_rnti from 5.1.3 in 38.321
...
...
@@ -441,8 +487,6 @@ void nr_initiate_ra_proc(module_id_t module_idP,
LOG_I
(
MAC
,
"[gNB %d][RAPROC] CC_id %d Frame %d, Slot %d Initiating RA procedure for preamble index %d
\n
"
,
module_idP
,
CC_id
,
frameP
,
slotP
,
preamble_index
);
if
(
ra
->
state
==
RA_IDLE
)
{
uint8_t
beam_index
=
ssb_index_from_prach
(
module_idP
,
frameP
,
slotP
,
...
...
@@ -452,13 +496,11 @@ void nr_initiate_ra_proc(module_id_t module_idP,
// the UE sent a RACH either for starting RA procedure or RA procedure failed and UE retries
if
(
ra
->
cfra
)
{
int
pr_found
=
0
;
if
(
preamble_index
==
ra
->
preambles
.
preamble_list
[
beam_index
])
{
pr_found
=
1
;
}
if
(
!
pr_found
)
{
// if the preamble received correspond to one of the listed
if
(
!
(
preamble_index
==
ra
->
preambles
.
preamble_list
[
beam_index
]))
{
LOG_E
(
MAC
,
"[gNB %d][RAPROC] FAILURE: preamble %d does not correspond to any of the ones in rach_ConfigDedicated
\n
"
,
module_idP
,
preamble_index
);
//Add continue statement for multiple and parallel CFRA process
return
;
// if the PRACH preamble does not correspond to any of the ones sent through RRC abort RA proc
}
}
...
...
@@ -607,7 +649,7 @@ void nr_schedule_reception_msg3(module_id_t module_idP, int CC_id, frame_t frame
}
}
void
nr_add_msg3
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
sub_frame_t
slotP
,
NR_RA_t
*
ra
,
uint8_t
RAR_pdu_index
){
void
nr_add_msg3
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
sub_frame_t
slotP
,
NR_RA_t
*
ra
,
uint8_t
*
RAR_pdu
){
gNB_MAC_INST
*
mac
=
RC
.
nrmac
[
module_idP
];
NR_COMMON_channels_t
*
cc
=
&
mac
->
common_channels
[
CC_id
];
...
...
@@ -704,7 +746,7 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
pusch_pdu
->
nrOfLayers
=
1
)
>>
3
;
// calling function to fill rar message
nr_fill_rar
(
module_idP
,
ra
,
cc
->
RAR_pdu
[
RAR_pdu_index
].
payload
,
pusch_pdu
);
nr_fill_rar
(
module_idP
,
ra
,
RAR_pdu
,
pusch_pdu
);
}
// WIP
...
...
@@ -756,7 +798,9 @@ void nr_generate_Msg2(module_id_t module_idP,
for
(
int
i
=
0
;
i
<
NR_NB_RA_PROC_MAX
;
i
++
)
{
NR_RA_t
*
ra
=
&
cc
->
ra
[
i
];
if
(
ra
->
state
==
Msg2
)
{
if
((
ra
->
Msg2_frame
==
frameP
)
&&
(
ra
->
Msg2_slot
==
slotP
))
{
uint16_t
RA_rnti
=
ra
->
RA_rnti
;
long
locationAndBandwidth
;
...
...
@@ -773,15 +817,16 @@ void nr_generate_Msg2(module_id_t module_idP,
}
uint16_t
*
vrb_map
=
cc
[
CC_id
].
vrb_map
;
int
rbStart
=
NRRIV2PRBOFFSET
(
locationAndBandwidth
,
275
)
;
int
rbStart
=
0
;
while
(
rbStart
<
dci10_bw
&&
vrb_map
[
rbStart
])
rbStart
++
;
if
(
rbStart
>=
dci10_bw
)
{
LOG_E
(
MAC
,
"%s(): cannot find free vrb_map for RA RNTI %04x!
\n
"
,
__func__
,
ra
->
RA_rnti
);
return
;
}
LOG_I
(
MAC
,
"[RAPROC] Scheduling common search space DCI type 1 dlBWP BW %d
\n
"
,
dci10_bw
);
if
((
ra
->
Msg2_frame
==
frameP
)
&&
(
ra
->
Msg2_slot
==
slotP
))
{
nfapi_nr_pdu_t
*
tx_req
=
&
nr_mac
->
TX_req
[
CC_id
].
pdu_list
[
nr_mac
->
TX_req
[
CC_id
].
Number_of_PDUs
];
nfapi_nr_dl_tti_request_pdu_t
*
dl_tti_pdsch_pdu
=
&
dl_req
->
dl_tti_pdu_list
[
dl_req
->
nPDUs
];
//RAJU
nfapi_nr_dl_tti_request_pdu_t
*
dl_tti_pdsch_pdu
=
&
dl_req
->
dl_tti_pdu_list
[
dl_req
->
nPDUs
];
memset
((
void
*
)
dl_tti_pdsch_pdu
,
0
,
sizeof
(
nfapi_nr_dl_tti_request_pdu_t
));
dl_tti_pdsch_pdu
->
PDUType
=
NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE
;
dl_tti_pdsch_pdu
->
PDUSize
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_nr_dl_tti_pdsch_pdu
));
...
...
@@ -852,11 +897,6 @@ void nr_generate_Msg2(module_id_t module_idP,
pdsch_pdu_rel15
->
StartSymbolIndex
=
StartSymbolIndex
;
pdsch_pdu_rel15
->
NrOfSymbols
=
NrOfSymbols
;
pdsch_pdu_rel15
->
dlDmrsSymbPos
=
fill_dmrs_mask
(
NULL
,
scc
->
dmrs_TypeA_Position
,
NrOfSymbols
);
pdsch_pdu_rel15
->
precodingAndBeamforming
.
numPRGs
=
1
;
pdsch_pdu_rel15
->
precodingAndBeamforming
.
prgSize
=
275
;
pdsch_pdu_rel15
->
precodingAndBeamforming
.
digBFInterfaces
=
1
;
pdsch_pdu_rel15
->
precodingAndBeamforming
.
PMIdx
[
0
]
=
0
;
pdsch_pdu_rel15
->
precodingAndBeamforming
.
beamIdx
[
0
]
=
ra
->
beam_id
;
int
CCEIndex
=
allocate_nr_CCEs
(
nr_mac
,
bwp
,
...
...
@@ -914,7 +954,7 @@ void nr_generate_Msg2(module_id_t module_idP,
// Program UL processing for Msg3
nr_get_Msg3alloc
(
scc
,
ubwp
,
slotP
,
frameP
,
ra
);
LOG_I
(
MAC
,
"Frame %d, Subframe %d: Setting Msg3 reception for Frame %d Subframe %d
\n
"
,
frameP
,
slotP
,
ra
->
Msg3_frame
,
ra
->
Msg3_slot
);
nr_add_msg3
(
module_idP
,
CC_id
,
frameP
,
slotP
,
ra
,
dci_pdu_index
);
nr_add_msg3
(
module_idP
,
CC_id
,
frameP
,
slotP
,
ra
,
(
void
*
)
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
]
);
ra
->
state
=
WAIT_Msg3
;
LOG_I
(
MAC
,
"[gNB %d][RAPROC] Frame %d, Subframe %d: RA state %d
\n
"
,
module_idP
,
frameP
,
slotP
,
ra
->
state
);
...
...
@@ -929,11 +969,10 @@ void nr_generate_Msg2(module_id_t module_idP,
nr_mac
->
TX_req
[
CC_id
].
SFN
=
frameP
;
nr_mac
->
TX_req
[
CC_id
].
Number_of_PDUs
++
;
nr_mac
->
TX_req
[
CC_id
].
Slot
=
slotP
;
memcpy
((
void
*
)
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
],
(
void
*
)
&
cc
[
CC_id
].
RAR_pdu
[
dci_pdu_index
].
payload
,
tx_req
->
TLVs
[
0
].
length
);
T
(
T_GNB_MAC_DL_RAR_PDU_WITH_DATA
,
T_INT
(
module_idP
),
T_INT
(
CC_id
),
T_INT
(
RA_rnti
),
T_INT
(
frameP
),
T_INT
(
slotP
),
T_INT
(
0
)
/* harq pid, meaningful? */
,
T_BUFFER
(
&
cc
[
CC_id
].
RAR_pdu
[
dci_pdu_index
].
payload
[
0
],
tx_req
->
TLVs
[
0
].
length
));
T_BUFFER
(
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
],
tx_req
->
TLVs
[
0
].
length
));
/* mark the corresponding RBs as used */
for
(
int
rb
=
0
;
rb
<
pdsch_pdu_rel15
->
rbSize
;
rb
++
)
vrb_map
[
rb
+
pdsch_pdu_rel15
->
rbStart
]
=
1
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
c04cf6ce
...
...
@@ -330,7 +330,6 @@ void nr_preprocessor_phytest(module_id_t module_id,
"%s(): could not find CCE for UE %d
\n
"
,
__func__
,
UE_id
);
nr_acknack_scheduling
(
module_id
,
UE_id
,
frame
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
c04cf6ce
...
...
@@ -456,11 +456,6 @@ void nr_configure_dci(gNB_MAC_INST *nr_mac,
pdcch_pdu
->
dci_pdu
.
beta_PDCCH_1_0
[
pdcch_pdu
->
numDlDci
]
=
0
;
pdcch_pdu
->
dci_pdu
.
powerControlOffsetSS
[
pdcch_pdu
->
numDlDci
]
=
1
;
pdcch_pdu
->
dci_pdu
.
precodingAndBeamforming
[
pdcch_pdu
->
numDlDci
].
numPRGs
=
1
;
pdcch_pdu
->
dci_pdu
.
precodingAndBeamforming
[
pdcch_pdu
->
numDlDci
].
prgSize
=
275
;
pdcch_pdu
->
dci_pdu
.
precodingAndBeamforming
[
pdcch_pdu
->
numDlDci
].
digBFInterfaces
=
1
;
pdcch_pdu
->
dci_pdu
.
precodingAndBeamforming
[
pdcch_pdu
->
numDlDci
].
PMIdx
[
0
]
=
0
;
pdcch_pdu
->
dci_pdu
.
precodingAndBeamforming
[
pdcch_pdu
->
numDlDci
].
beamIdx
[
0
]
=
beam_index
;
}
void
nr_fill_nfapi_dl_pdu
(
int
Mod_idP
,
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
c04cf6ce
...
...
@@ -206,6 +206,8 @@ typedef struct {
uint8_t
max_association_period
;
//SSB index
uint8_t
ssb_index
[
MAX_NUM_OF_SSB
];
//CB preambles for each SSB
uint8_t
cb_preambles_per_ssb
;
}
NR_COMMON_channels_t
;
...
...
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