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
d6097b32
Commit
d6097b32
authored
Feb 17, 2024
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor to use common code
parent
57d69a93
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
192 deletions
+30
-192
nfapi/oai_integration/nfapi_pnf.c
nfapi/oai_integration/nfapi_pnf.c
+30
-192
No files found.
nfapi/oai_integration/nfapi_pnf.c
View file @
d6097b32
...
...
@@ -1108,36 +1108,20 @@ void pnf_phy_deallocate_p7_vendor_ext(nfapi_p7_message_header_t *header) {
notifiedFIFO_elt_t
*
l1tx_message_extract
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
slot
)
{
notifiedFIFO_elt_t
*
res
;
DevAssert
(
0
);
//TODO: This needs to be reworked for nfapi to work
res
=
pullNotifiedFIFO
(
&
gNB
->
L1_tx_free
);
return
res
;
}
int
pnf_phy_ul_dci_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_ul_dci_request_t
*
req
)
{
// LOG_D(PHY,"[PNF] HI_DCI0_REQUEST SFN/SF:%05d dci:%d hi:%d\n", NFAPI_SFNSF2DEC(req->sfn_sf), req->hi_dci0_request_body.number_of_dci, req->hi_dci0_request_body.number_of_hi);
struct
PHY_VARS_gNB_s
*
gNB
=
RC
.
gNB
[
0
];
// extract the next available thread message (priority to message with current slot, then free message)
notifiedFIFO_elt_t
*
res
;
res
=
l1tx_message_extract
(
gNB
,
req
->
SFN
,
req
->
Slot
);
processingData_L1tx_t
*
msgTx
=
(
processingData_L1tx_t
*
)
NotifiedFifoData
(
res
);
if
(
proc
==
NULL
)
proc
=
&
gNB
->
proc
.
L1_proc
;
if
(
req
->
numPdus
>
0
)
{
for
(
int
i
=
0
;
i
<
req
->
numPdus
;
i
++
)
{
if
(
req
->
ul_dci_pdu_list
[
i
].
PDUType
==
NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE
)
// only possible value 0: PDCCH PDU
msgTx
->
ul_pdcch_pdu
[
i
]
=
req
->
ul_dci_pdu_list
[
i
];
else
LOG_E
(
PHY
,
"[PNF] UL_DCI_REQ sfn_slot:%d PDU[%d] - unknown pdu type:%d
\n
"
,
NFAPI_SFNSLOT2DEC
(
req
->
SFN
,
req
->
Slot
),
req
->
numPdus
-
1
,
req
->
ul_dci_pdu_list
[
req
->
numPdus
-
1
].
PDUType
);
}
}
extern
void
nr_schedule_ul_dci_req
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_ul_dci_request_t
*
UL_dci_req
);
int
pnf_phy_ul_dci_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_ul_dci_request_t
*
req
)
{
DevAssert
(
RC
.
gNB
!=
NULL
&&
RC
.
gNB
[
0
]
!=
NULL
);
PHY_VARS_gNB
*
gNB
=
RC
.
gNB
[
0
];
// phy_inst?
pushNotifiedFIFO
(
&
gNB
->
L1_tx_filled
,
res
);
nr_schedule_ul_dci_req
(
gNB
,
req
);
return
0
;
}
...
...
@@ -1172,85 +1156,19 @@ int pnf_phy_hi_dci0_req(L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, nfa
}
int
pnf_phy_dl_tti_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_dl_tti_request_t
*
req
)
{
if
(
RC
.
ru
==
0
)
{
return
-
1
;
}
if
(
RC
.
gNB
==
0
)
{
return
-
2
;
}
if
(
RC
.
gNB
[
0
]
==
0
)
{
return
-
3
;
}
if
(
sync_var
!=
0
)
{
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"%s() Main system not up - is this a dummy subframe?
\n
"
,
__FUNCTION__
);
return
-
4
;
}
// from dl_tti_req_fn fptr
extern
void
nr_schedule_dl_tti_req
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_dl_tti_request_t
*
DL_req
);
int
pnf_phy_dl_tti_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_dl_tti_request_t
*
DL_req
)
{
DevAssert
(
proc
==
NULL
);
DevAssert
(
sync_var
==
0
);
DevAssert
(
RC
.
gNB
!=
NULL
&&
RC
.
gNB
[
0
]
!=
NULL
);
PHY_VARS_gNB
*
gNB
=
RC
.
gNB
[
0
];
// phy_inst?
int
sfn
=
req
->
SFN
;
int
slot
=
req
->
Slot
;
struct
PHY_VARS_gNB_s
*
gNB
=
RC
.
gNB
[
0
];
if
(
proc
==
NULL
)
proc
=
&
gNB
->
proc
.
L1_proc
;
nfapi_nr_dl_tti_request_pdu_t
*
dl_tti_pdu_list
=
req
->
dl_tti_request_body
.
dl_tti_pdu_list
;
if
(
req
->
dl_tti_request_body
.
nPDUs
)
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"%s() TX:%d/%d RX:%d/%d; sfn:%d, slot:%d, nGroup:%u, nPDUs: %u, nUE: %p, PduIdx: %p,
\n
"
,
__FUNCTION__
,
proc
->
frame_tx
,
proc
->
slot_tx
,
proc
->
frame_rx
,
proc
->
slot_rx
,
// TODO: change subframes to slot
req
->
SFN
,
req
->
Slot
,
req
->
dl_tti_request_body
.
nGroup
,
req
->
dl_tti_request_body
.
nPDUs
,
req
->
dl_tti_request_body
.
nUe
,
req
->
dl_tti_request_body
.
PduIdx
);
for
(
int
i
=
0
;
i
<
req
->
dl_tti_request_body
.
nPDUs
;
i
++
)
{
// NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() sfn/sf:%d PDU[%d] size:%d pdcch_vars->num_dci:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), i, dl_config_pdu_list[i].pdu_size,pdcch_vars->num_dci);
notifiedFIFO_elt_t
*
res
;
res
=
l1tx_message_extract
(
gNB
,
sfn
,
slot
);
processingData_L1tx_t
*
msgTx
=
(
processingData_L1tx_t
*
)
NotifiedFifoData
(
res
);
nr_schedule_dl_tti_req
(
gNB
,
DL_req
);
if
(
dl_tti_pdu_list
[
i
].
PDUType
==
NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE
)
{
msgTx
->
pdcch_pdu
[
i
]
=
dl_tti_pdu_list
[
i
].
pdcch_pdu
;
// copies all the received PDCCH PDUs
}
else
if
(
dl_tti_pdu_list
[
i
].
PDUType
==
NFAPI_NR_DL_TTI_SSB_PDU_TYPE
)
{
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PDU:%d BCH: pdu_index:%u pdu_length:%d sdu_length:%d BCH_SDU:%x,%x,%x\n", __FUNCTION__, i, pdu_index, bch_pdu->bch_pdu_rel8.length, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length, sdu[0], sdu[1], sdu[2]);
handle_nr_nfapi_ssb_pdu
(
msgTx
,
sfn
,
slot
,
&
dl_tti_pdu_list
[
i
]);
}
else
if
(
dl_tti_pdu_list
[
i
].
PDUType
==
NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE
)
{
nfapi_nr_dl_tti_pdsch_pdu
*
pdsch_pdu
=
&
dl_tti_pdu_list
[
i
].
pdsch_pdu
;
nfapi_nr_dl_tti_pdsch_pdu_rel15_t
*
rel15_pdu
=
&
pdsch_pdu
->
pdsch_pdu_rel15
;
nfapi_nr_pdu_t
*
tx_data
=
tx_data_request
[
sfn
][
slot
][
rel15_pdu
->
pduIndex
];
if
(
tx_data
!=
NULL
)
{
//uint8_t *dlsch_sdu = (uint8_t *)tx_data->TLVs[0].value.direct;
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() DLSCH:pdu_index:%d handle_nfapi_dlsch_pdu(eNB, proc_rxtx, dlsch_pdu, transport_blocks:%d sdu:%p) eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols:%d\n", __FUNCTION__, rel8_pdu->pdu_index, rel8_pdu->transport_blocks, dlsch_sdu, eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols);
AssertFatal
(
msgTx
->
num_pdsch_slot
<
gNB
->
max_nb_pdsch
,
"Number of PDSCH PDUs %d exceeded the limit %d
\n
"
,
msgTx
->
num_pdsch_slot
,
gNB
->
max_nb_pdsch
);
AssertFatal
(
false
,
"not implemented
\n
"
);
//handle_nr_nfapi_pdsch_pdu(msgTx, pdsch_pdu, dlsch_sdu);
}
else
{
NFAPI_TRACE
(
NFAPI_TRACE_ERROR
,
"%s() DLSCH NULL TX PDU SFN/SF:%d PDU_INDEX:%d
\n
"
,
__FUNCTION__
,
NFAPI_SFNSLOT2DEC
(
sfn
,
slot
),
rel15_pdu
->
pduIndex
);
}
}
else
if
(
dl_tti_pdu_list
[
i
].
PDUType
==
NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE
)
{
nfapi_nr_dl_tti_csi_rs_pdu
*
csi_rs_pdu
=
&
dl_tti_pdu_list
[
i
].
csi_rs_pdu
;
handle_nfapi_nr_csirs_pdu
(
msgTx
,
sfn
,
slot
,
csi_rs_pdu
);
}
else
{
NFAPI_TRACE
(
NFAPI_TRACE_ERROR
,
"%s() UNKNOWN:%d
\n
"
,
__FUNCTION__
,
dl_tti_pdu_list
[
i
].
PDUType
);
}
pushNotifiedFIFO
(
&
gNB
->
L1_tx_filled
,
res
);
}
if
(
req
->
vendor_extension
)
free
(
req
->
vendor_extension
);
if
(
DL_req
->
vendor_extension
)
free
(
DL_req
->
vendor_extension
);
return
0
;
}
...
...
@@ -1348,29 +1266,13 @@ int pnf_phy_dl_config_req(L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, n
}
extern
void
nr_schedule_tx_req
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_tx_data_request_t
*
TX_req
);
int
pnf_phy_tx_data_req
(
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_tx_data_request_t
*
req
)
{
DevAssert
(
RC
.
gNB
!=
NULL
&&
RC
.
gNB
[
0
]
!=
NULL
);
PHY_VARS_gNB
*
gNB
=
RC
.
gNB
[
0
];
// phy_inst?
int
pnf_phy_tx_data_req
(
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_tx_data_request_t
*
req
)
{
uint16_t
sfn
=
req
->
SFN
;
uint16_t
slot
=
req
->
Slot
;
if
(
req
->
Number_of_PDUs
==
0
)
LOG_D
(
PHY
,
"%s() SFN/SLOT:%d%d PDUs:%d
\n
"
,
__FUNCTION__
,
sfn
,
slot
,
req
->
Number_of_PDUs
);
//if (req->pdu_list[0].TLVs->tag == NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST) {
for
(
int
i
=
0
;
i
<
req
->
Number_of_PDUs
;
i
++
)
{
// LOG_D(PHY,"%s() SFN/SF:%d%d number_of_pdus:%d [PDU:%d] pdu_length:%d pdu_index:%d num_segments:%d\n",
// __FUNCTION__,
// sfn, sf,
// req->tx_request_body.number_of_pdus,
// i,
// req->tx_request_body.tx_pdu_list[i].pdu_length,
// req->tx_request_body.tx_pdu_list[i].pdu_index,
// req->tx_request_body.tx_pdu_list[i].num_segments
// );
// tx_request_pdu[sfn][sf][i] = &req->tx_request_body.tx_pdu_list[i];
tx_data_request
[
sfn
][
slot
][
i
]
=
&
req
->
pdu_list
[
i
];
}
//}
nr_schedule_tx_req
(
gNB
,
req
);
return
0
;
}
...
...
@@ -1401,77 +1303,13 @@ int pnf_phy_tx_req(nfapi_pnf_p7_config_t *pnf_p7, nfapi_tx_request_t *req) {
return
0
;
}
extern
void
nr_schedule_ul_tti_req
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_ul_tti_request_t
*
UL_tti_req
);
int
pnf_phy_ul_tti_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_ul_tti_request_t
*
req
)
{
DevAssert
(
RC
.
gNB
!=
NULL
&&
RC
.
gNB
[
0
]
!=
NULL
);
PHY_VARS_gNB
*
gNB
=
RC
.
gNB
[
0
];
// phy_inst?
int
pnf_phy_ul_tti_req
(
gNB_L1_rxtx_proc_t
*
proc
,
nfapi_pnf_p7_config_t
*
pnf_p7
,
nfapi_nr_ul_tti_request_t
*
req
)
{
LOG_D
(
PHY
,
"[PNF] UL_TTI_REQ recvd, writing into structs, SFN/slot:%d.%d pdu:%d
\n
"
,
req
->
SFN
,
req
->
Slot
,
req
->
n_pdus
);
if
(
RC
.
ru
==
0
)
{
return
-
1
;
}
if
(
RC
.
gNB
==
0
)
{
return
-
2
;
}
if
(
RC
.
gNB
[
0
]
==
0
)
{
return
-
3
;
}
if
(
sync_var
!=
0
)
{
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"%s() Main system not up - is this a dummy slot?
\n
"
,
__FUNCTION__
);
return
-
4
;
}
uint16_t
curr_sfn
=
req
->
SFN
;
uint16_t
curr_slot
=
req
->
Slot
;
struct
PHY_VARS_gNB_s
*
gNB
=
RC
.
gNB
[
0
];
if
(
proc
==
NULL
)
proc
=
&
gNB
->
proc
.
L1_proc
;
nfapi_nr_ul_tti_request_number_of_pdus_t
*
ul_tti_pdu_list
=
req
->
pdus_list
;
for
(
int
i
=
0
;
i
<
req
->
n_pdus
;
i
++
)
{
switch
(
ul_tti_pdu_list
[
i
].
pdu_type
)
{
case
NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE
:
//LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_UL_TTI_PUSCH_PDU_TYPE for %d.%d\n", frame, slot, UL_tti_req->SFN, UL_tti_req->Slot);
//curr_sfn = curr_sfn + 3; //Gokul
nr_fill_ulsch
(
gNB
,
curr_sfn
,
curr_slot
,
&
ul_tti_pdu_list
[
i
].
pusch_pdu
);
break
;
case
NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE
:
//LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_UL_TTI_PUCCH_PDU_TYPE for %d.%d\n", frame, slot, UL_tti_req->SFN, UL_tti_req->Slot);
nr_fill_pucch
(
gNB
,
curr_sfn
,
curr_slot
,
&
ul_tti_pdu_list
[
i
].
pucch_pdu
);
break
;
case
NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE
:
//LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_UL_TTI_PRACH_PDU_TYPE for %d.%d\n", frame, slot, UL_tti_req->SFN, UL_tti_req->Slot);
nr_fill_prach
(
gNB
,
curr_sfn
,
curr_slot
,
&
ul_tti_pdu_list
[
i
].
prach_pdu
);
if
(
gNB
->
RU_list
[
0
]
->
if_south
==
LOCAL_RF
)
nr_fill_prach_ru
(
gNB
->
RU_list
[
0
],
curr_sfn
,
curr_slot
,
&
ul_tti_pdu_list
[
i
].
prach_pdu
);
break
;
default:
NFAPI_TRACE
(
NFAPI_TRACE_ERROR
,
"%s() PDU:%i UNKNOWN type :%d
\n
"
,
__FUNCTION__
,
i
,
ul_tti_pdu_list
[
i
].
pdu_type
);
break
;
}
// //LOG_D(PHY, "%s() sfn/sf:%d PDU[%d] size:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), i, ul_config_pdu_list[i].pdu_size);
// if (
// ul_tti_pdu_list[i].pdu_type == NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE ||
// ul_tti_pdu_list[i].pdu_type == NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE ||
// ul_tti_pdu_list[i].pdu_type == NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE ||
// ul_tti_pdu_list[i].pdu_type == NFAPI_NR_UL_CONFIG_SRS_PDU_TYPE
// ) {
// //LOG_D(PHY, "%s() handle_nfapi_ul_pdu() for PDU:%d\n", __FUNCTION__, i);
// // handle_nfapi_ul_pdu(eNB,proc,&ul_config_pdu_list[i],curr_sfn,curr_sf,req->ul_config_request_body.srs_present);
// // TODO: dont have an NR function for this, also srs_present flag not there
// } else {
// NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() PDU:%i UNKNOWN type :%d\n", __FUNCTION__, i, ul_tti_pdu_list[i].pdu_type);
// }
}
nr_schedule_ul_tti_req
(
gNB
,
req
);
return
0
;
}
...
...
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