/******************************************************************************
*
-* Copyright (c) 2019 Intel.
+* Copyright (c) 2021 Intel.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
**/
#include "nr5g_fapi_framework.h"
-#include "gnb_l1_l2_api.h"
#include "nr5g_fapi_fapi2mac_api.h"
#include "nr5g_fapi_fapi2phy_api.h"
#include "nr5g_fapi_fapi2phy_p7_proc.h"
*
**/
uint8_t nr5g_fapi_ul_dci_request(
+ bool is_urllc,
p_nr5g_fapi_phy_instance_t p_phy_instance,
fapi_ul_dci_req_t * p_fapi_req,
fapi_vendor_msg_t * p_fapi_vendor_msg)
PULDCIRequestStruct p_ia_ul_dci_req;
PMAC2PHY_QUEUE_EL p_list_elem;
nr5g_fapi_stats_t *p_stats;
- UNUSED(p_fapi_vendor_msg);
if (NULL == p_phy_instance) {
NR5G_FAPI_LOG(ERROR_LOG, ("[UL_DCI.request] Invalid " "phy instance"));
}
p_ia_ul_dci_req = (PULDCIRequestStruct) (p_list_elem + 1);
+ NR5G_FAPI_MEMSET(p_ia_ul_dci_req, sizeof(PULDCIRequestStruct), 0,
+ sizeof(PULDCIRequestStruct));
p_ia_ul_dci_req->sMsgHdr.nMessageType = MSG_TYPE_PHY_UL_DCI_REQ;
p_ia_ul_dci_req->sMsgHdr.nMessageLen =
(uint16_t) sizeof(ULDCIRequestStruct);
p_ia_ul_dci_req->sSFN_Slot.nSlot));
return FAILURE;
}
- nr5g_fapi_fapi2phy_add_to_api_list(p_list_elem);
+ nr5g_fapi_fapi2phy_add_to_api_list(is_urllc, p_list_elem);
p_stats->iapi_stats.iapi_ul_dci_req++;
- NR5G_FAPI_LOG(DEBUG_LOG, ("[UL_DCI.request][%d][%d,%d]",
+
+
+ if (NULL != p_fapi_vendor_msg) {
+ nr5g_fapi_ul_dci_req_to_phy_translation_vendor_ext(p_phy_instance,
+ p_fapi_vendor_msg,
+ p_ia_ul_dci_req);
+ }
+
+ NR5G_FAPI_LOG(DEBUG_LOG, ("[UL_DCI.request][%u][%u,%u,%u] is_urllc %u",
p_phy_instance->phy_id,
- p_ia_ul_dci_req->sSFN_Slot.nSFN, p_ia_ul_dci_req->sSFN_Slot.nSlot));
+ p_ia_ul_dci_req->sSFN_Slot.nSFN, p_ia_ul_dci_req->sSFN_Slot.nSlot,
+ p_ia_ul_dci_req->sSFN_Slot.nSym, is_urllc));
return SUCCESS;
}
PULDCIRequestStruct p_ia_ul_dci_req)
{
int idx;
+ int ruidx;
fapi_dci_pdu_t *p_fapi_dci_pdu;
DCIPDUStruct *p_ia_dci_pdu;
nr5g_fapi_stats_t *p_stats;
p_ia_dci_pdu->nCpType = p_fapi_dci_pdu->pdcchPduConfig.cyclicPrefix;
p_freq_dom_res = &p_fapi_dci_pdu->pdcchPduConfig.freqDomainResource[0];
p_ia_dci_pdu->nFreqDomain[0] =
- ((uint32_t) (p_freq_dom_res[0])) |
+ ((uint32_t) (p_freq_dom_res[0])) |
(((uint32_t) (p_freq_dom_res[1])) << 8) |
(((uint32_t) (p_freq_dom_res[2])) << 16) |
(((uint32_t) (p_freq_dom_res[3])) << 24);
p_ia_dci_pdu->nFreqDomain[1] =
- ((uint32_t) (p_freq_dom_res[4])) |
+ ((uint32_t) (p_freq_dom_res[4])) |
(((uint32_t) (p_freq_dom_res[5])) << 8);
p_ia_dci_pdu->nStartSymbolIndex =
p_fapi_dci_pdu->pdcchPduConfig.startSymbolIndex;
p_fapi_dci_pdu->pdcchPduConfig.dlDci[0].scramblingRnti;
p_ia_dci_pdu->nTotalBits =
p_fapi_dci_pdu->pdcchPduConfig.dlDci[0].payloadSizeBits;
+
+
+ if (USE_VENDOR_EPREXSSB != p_phy_instance->phy_config.use_vendor_EpreXSSB)
+ {
p_ia_dci_pdu->nEpreRatioOfPDCCHToSSB =
- p_fapi_dci_pdu->pdcchPduConfig.dlDci[0].powerControlOfssetSS;
+ nr5g_fapi_calculate_nEpreRatioOfPDCCHToSSB(p_fapi_dci_pdu->
+ pdcchPduConfig.dlDci[0].beta_pdcch_1_0);
p_ia_dci_pdu->nEpreRatioOfDmrsToSSB =
- p_fapi_dci_pdu->pdcchPduConfig.dlDci[0].beta_pdcch_1_0;
+ nr5g_fapi_calculate_nEpreRatioOfDmrsToSSB(p_fapi_dci_pdu->
+ pdcchPduConfig.dlDci[0].powerControlOffsetSS);
+ }
+
p_ia_dci_pdu->nTotalBits =
p_fapi_dci_pdu->pdcchPduConfig.dlDci[0].payloadSizeBits;
if (FAILURE == NR5G_FAPI_MEMCPY(p_ia_dci_pdu->nDciBits,
p_ia_dci_pdu->nID = p_ia_dci_pdu->nScid;
p_ia_dci_pdu->nNrofTxRU = 0x0;
p_ia_dci_pdu->nBeamId = 0x0;
+
+ for (ruidx = 0; ruidx < MAX_TXRU_NUM; ruidx++) {
+ p_ia_dci_pdu->nTxRUIdx[ruidx] = 0;
+ }
p_ia_curr += RUP32B(sizeof(DCIPDUStruct));
}
return SUCCESS;
}
+ /** @ingroup group_source_api_p7_fapi2phy_proc
+ *
+ * @param[in] p_fapi_vendor_msg Pointer to FAPI UL_DCI.request vendor message.
+ * @param[out] p_ia_ul_dci_req Pointer to IAPI UL_DCI.request structure.
+ *
+ * @return no return.
+ *
+ * @description
+ * This function fills fields for UL_DCI.request structure that come from
+ * a vendor extension.
+ *
+**/
+void nr5g_fapi_ul_dci_req_to_phy_translation_vendor_ext(
+ p_nr5g_fapi_phy_instance_t p_phy_instance,
+ fapi_vendor_msg_t * p_fapi_vendor_msg,
+ PULDCIRequestStruct p_ia_ul_dci_req)
+{
+ int idx = 0;
+
+ fapi_vendor_dci_pdu_t *p_vendor_dci_pdu;
+ DCIPDUStruct *p_ia_dci_pdu;
+ uint8_t *p_ia_curr = NULL;
+ p_ia_ul_dci_req->sSFN_Slot.nSym = p_fapi_vendor_msg->p7_req_vendor.ul_dci_req.sym;
+ p_ia_curr = (uint8_t *) p_ia_ul_dci_req->sULDCIPDU;
+ for (idx = 0; idx < p_ia_ul_dci_req->nDCI; idx++) {
+ p_ia_dci_pdu = (DCIPDUStruct *) p_ia_curr;
+ if (USE_VENDOR_EPREXSSB == p_phy_instance->phy_config.use_vendor_EpreXSSB)
+ {
+ p_vendor_dci_pdu = &p_fapi_vendor_msg->p7_req_vendor.ul_dci_req.pdus[idx];
+ p_ia_dci_pdu->nEpreRatioOfPDCCHToSSB = p_vendor_dci_pdu->
+ pdcch_pdu_config.dl_dci[0].epre_ratio_of_pdcch_to_ssb;
+ p_ia_dci_pdu->nEpreRatioOfDmrsToSSB = p_vendor_dci_pdu->
+ pdcch_pdu_config.dl_dci[0].epre_ratio_of_dmrs_to_ssb;
+ }
+ p_ia_curr += RUP32B(sizeof(DCIPDUStruct));
+ }
+}
\ No newline at end of file