################################################################################
*******************************************************************************/
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
/* header include files -- defines (.h) */
-#include "envopt.h" /* environment options */
-#include "envdep.h" /* environment dependent */
-#include "envind.h" /* environment independent */
-#include "gen.h" /* general layer */
-#include "ssi.h" /* system service interface */
-#include "cm_hash.h" /* common hash list */
-#include "cm_mblk.h" /* common memory link list library */
-#include "cm_llist.h" /* common linked list library */
-#include "cm_err.h" /* common error */
-#include "cm_lte.h" /* common LTE */
+#include "common_def.h"
#include "lrg.h" /* Layer manager interface includes*/
#include "crg.h" /* CRG interface includes*/
#include "rgu.h" /* RGU interface includes*/
#include "lwr_mac_fsm.h"
/* header/extern include files (.x) */
-#include "gen.x" /* general layer typedefs */
-#include "ssi.x" /* system services typedefs */
-#include "cm5.x" /* common timers */
-#include "cm_hash.x" /* common hash list */
-#include "cm_lib.x" /* common library */
-#include "cm_llist.x" /* common linked list */
-#include "cm_mblk.x" /* memory management */
-#include "cm_tkns.x" /* common tokens */
-#include "cm_lte.x" /* common tokens */
#include "rgu.x" /* RGU types */
#include "tfu.x" /* RGU types */
#include "lrg.x" /* layer management typedefs for MAC */
#include "mac.h"
#include "rg.x" /* typedefs for MAC */
#include "lwr_mac_phy.h"
-#include "common_def.h"
-#include "math.h"
#define MIB_SFN_BITMASK 0xFC
#define PDCCH_PDU_TYPE 0
#define SSB_PDU_TYPE 3
#define PRACH_PDU_TYPE 0
#define PUSCH_PDU_TYPE 1
+#define PUCCH_PDU_TYPE 2
#define PDU_PRESENT 1
#define SET_MSG_LEN(x, size) x += size
RETVALUE(ROK);
}
-#ifdef FAPI
+#ifdef INTEL_FAPI
/*******************************************************************
*
* @brief Fills FAPI message header
S16 lwr_mac_handleParamReqEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
/* startGuardTimer(); */
uint32_t msgLen = 0; //Length of message Body
fapi_param_req_t *paramReq = NULL;
S16 lwr_mac_handleParamRspEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
/* stopGuardTimer(); */
uint8_t index;
uint32_t encodedVal;
S16 lwr_mac_handleConfigReqEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
Inst inst = 0;
uint8_t idx = 0;
uint8_t index = 0;
fillTlvs(&configReq->tlvs[index++], FAPI_RSSI_MESUREMENT_TAG, \
sizeof(uint8_t), macCfgParams.rssiUnit, &msgLen);
+ /* fill DMRS Type A Pos */
+ fillTlvs(&configReq->tlvs[index++], FAPI_DMRS_TYPE_A_POS_TAG, \
+ sizeof(uint8_t), macCfgParams.dmrsTypeAPos, &msgLen);
+
fillMsgHeader(&configReq->header, FAPI_CONFIG_REQUEST, msgLen);
DU_LOG("\nLWR_MAC: Sending Config Request to Phy");
S16 lwr_mac_handleConfigRspEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
fapi_config_resp_t *configRsp;
configRsp = (fapi_config_resp_t *)msg;
* ****************************************************************/
S16 lwr_mac_handleStartReqEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint32_t msgLen = 0;
fapi_start_req_t *startReq;
S16 lwr_mac_handleStopReqEvt(void *msg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint32_t msgLen = 0;
fapi_stop_req_t *stopReq = NULLP;
LWR_MAC_ALLOC(stopReq, sizeof(fapi_stop_req_t));
DU_LOG("\nLWR_MAC: MIB PDU %x", *val);
}
-#ifdef FAPI
+#ifdef INTEL_FAPI
/*******************************************************************
*
* @brief fills SSB PDU required for DL TTI info in MAC
*/
coreset0Size= sib1PdcchInfo->coreset0Cfg.coreSet0Size;
rbStart = 0; /* For SIB1 */
- //rbStart = sib1PdcchInfo->dci.pdschCfg->freqAlloc.rbStart;
- rbLen = sib1PdcchInfo->dci.pdschCfg->freqAlloc.rbSize;
+ //rbStart = sib1PdcchInfo->dci.pdschCfg->pdschFreqAlloc.freqAlloc.startPrb;
+ rbLen = sib1PdcchInfo->dci.pdschCfg->pdschFreqAlloc.freqAlloc.numPrb;
if((rbLen >=1) && (rbLen <= coreset0Size - rbStart))
{
}
/* Fetching DCI field values */
- timeDomResAssign = sib1PdcchInfo->dci.pdschCfg->timeAlloc.
+ timeDomResAssign = sib1PdcchInfo->dci.pdschCfg->pdschTimeAlloc.
rowIndex -1;
- VRB2PRBMap = sib1PdcchInfo->dci.pdschCfg->freqAlloc.\
+ VRB2PRBMap = sib1PdcchInfo->dci.pdschCfg->pdschFreqAlloc.\
vrbPrbMapping;
modNCodScheme = sib1PdcchInfo->dci.pdschCfg->codeword[0].mcsIndex;
redundancyVer = sib1PdcchInfo->dci.pdschCfg->codeword[0].rvIndex;
coreset0Size= rarPdcchInfo->coreset0Cfg.coreSet0Size;
rbStart = 0; /* For SIB1 */
//rbStart = rarPdcchInfo->dci.pdschCfg->freqAlloc.rbStart;
- rbLen = rarPdcchInfo->dci.pdschCfg->freqAlloc.rbSize;
+ rbLen = rarPdcchInfo->dci.pdschCfg->pdschFreqAlloc.freqAlloc.numPrb;
if((rbLen >=1) && (rbLen <= coreset0Size - rbStart))
{
}
/* Fetching DCI field values */
- timeDomResAssign = rarPdcchInfo->dci.pdschCfg->timeAlloc.rowIndex -1;
- VRB2PRBMap = rarPdcchInfo->dci.pdschCfg->freqAlloc.vrbPrbMapping;
+ timeDomResAssign = rarPdcchInfo->dci.pdschCfg->pdschTimeAlloc.rowIndex -1;
+ VRB2PRBMap = rarPdcchInfo->dci.pdschCfg->pdschFreqAlloc.vrbPrbMapping;
modNCodScheme = rarPdcchInfo->dci.pdschCfg->codeword[0].mcsIndex;
tbScaling = 0; /* configured to 0 scaling */
reserved = 0;
/* TODO: Fill values of coreset0Size, rbStart and rbLen */
coreset0Size = msg4PdcchInfo->coreset0Cfg.coreSet0Size;
//rbStart = msg4PdcchInfo->dci.pdschCfg->freqAlloc.rbStart;
- rbLen = msg4PdcchInfo->dci.pdschCfg->freqAlloc.rbSize;
+ rbLen = msg4PdcchInfo->dci.pdschCfg->pdschFreqAlloc.freqAlloc.numPrb;
if((rbLen >=1) && (rbLen <= coreset0Size - rbStart))
{
/* Fetching DCI field values */
dciFormatId = msg4Info->dciFormatId; /* DCI indentifier for DL */
- timeDomResAssign = msg4PdcchInfo->dci.pdschCfg->timeAlloc.rowIndex -1;
- VRB2PRBMap = msg4PdcchInfo->dci.pdschCfg->freqAlloc.vrbPrbMapping;
+ timeDomResAssign = msg4PdcchInfo->dci.pdschCfg->pdschTimeAlloc.rowIndex -1;
+ VRB2PRBMap = msg4PdcchInfo->dci.pdschCfg->pdschFreqAlloc.vrbPrbMapping;
modNCodScheme = msg4PdcchInfo->dci.pdschCfg->codeword[0].mcsIndex;
ndi = msg4Info->ndi;
redundancyVer = msg4PdcchInfo->dci.pdschCfg->codeword[0].rvIndex;
return RFAILED;;
}
dlTtiReqPdu->pduType = PDCCH_PDU_TYPE;
- dlTtiReqPdu->u.pdcch_pdu.bwpSize = bwp->BWPSize;
- dlTtiReqPdu->u.pdcch_pdu.bwpPart = bwp->BWPStart;
+ dlTtiReqPdu->u.pdcch_pdu.bwpSize = bwp->freqAlloc.numPrb;
+ dlTtiReqPdu->u.pdcch_pdu.bwpPart = bwp->freqAlloc.startPrb;
dlTtiReqPdu->u.pdcch_pdu.subCarrierSpacing = bwp->subcarrierSpacing;
dlTtiReqPdu->u.pdcch_pdu.cyclicPrefix = bwp->cyclicPrefix;
dlTtiReqPdu->u.pdcch_pdu.startSymbolIndex = pdcchInfo->coreset0Cfg.startSymbolIndex;
dlTtiReqPdu->u.pdsch_pdu.pduBitMap = pdschInfo->pduBitmap;
dlTtiReqPdu->u.pdsch_pdu.rnti = pdschInfo->rnti;
dlTtiReqPdu->u.pdsch_pdu.pduIndex = pduIndex;
- dlTtiReqPdu->u.pdsch_pdu.bwpSize = bwp.BWPSize;
- dlTtiReqPdu->u.pdsch_pdu.bwpStart = bwp.BWPStart;
+ dlTtiReqPdu->u.pdsch_pdu.bwpSize = bwp.freqAlloc.numPrb;
+ dlTtiReqPdu->u.pdsch_pdu.bwpStart = bwp.freqAlloc.startPrb;
dlTtiReqPdu->u.pdsch_pdu.subCarrierSpacing = bwp.subcarrierSpacing;
dlTtiReqPdu->u.pdsch_pdu.cyclicPrefix = bwp.cyclicPrefix;
dlTtiReqPdu->u.pdsch_pdu.nrOfCodeWords = pdschInfo->numCodewords;
dlTtiReqPdu->u.pdsch_pdu.scid = pdschInfo->dmrs.scid;
dlTtiReqPdu->u.pdsch_pdu.numDmrsCdmGrpsNoData = pdschInfo->dmrs.numDmrsCdmGrpsNoData;
dlTtiReqPdu->u.pdsch_pdu.dmrsPorts = pdschInfo->dmrs.dmrsPorts;
- dlTtiReqPdu->u.pdsch_pdu.resourceAlloc = pdschInfo->freqAlloc.resourceAlloc;
+ dlTtiReqPdu->u.pdsch_pdu.resourceAlloc = pdschInfo->pdschFreqAlloc.resourceAllocType;
/* since we are using type-1, hence rbBitmap excluded */
- dlTtiReqPdu->u.pdsch_pdu.rbStart = pdschInfo->freqAlloc.rbStart;
- dlTtiReqPdu->u.pdsch_pdu.rbSize = pdschInfo->freqAlloc.rbSize;
- dlTtiReqPdu->u.pdsch_pdu.vrbToPrbMapping = pdschInfo->freqAlloc.vrbPrbMapping;
- dlTtiReqPdu->u.pdsch_pdu.startSymbIndex = pdschInfo->timeAlloc.startSymbolIndex;
- dlTtiReqPdu->u.pdsch_pdu.nrOfSymbols = pdschInfo->timeAlloc.numSymbols;
+ dlTtiReqPdu->u.pdsch_pdu.rbStart = pdschInfo->pdschFreqAlloc.freqAlloc.startPrb;
+ dlTtiReqPdu->u.pdsch_pdu.rbSize = pdschInfo->pdschFreqAlloc.freqAlloc.numPrb;
+ dlTtiReqPdu->u.pdsch_pdu.vrbToPrbMapping = pdschInfo->pdschFreqAlloc.vrbPrbMapping;
+ dlTtiReqPdu->u.pdsch_pdu.startSymbIndex = pdschInfo->pdschTimeAlloc.timeAlloc.startSymb;
+ dlTtiReqPdu->u.pdsch_pdu.nrOfSymbols = pdschInfo->pdschTimeAlloc.timeAlloc.numSymb;
dlTtiReqPdu->u.pdsch_pdu.preCodingAndBeamforming.numPrgs = pdschInfo->beamPdschInfo.numPrgs;
dlTtiReqPdu->u.pdsch_pdu.preCodingAndBeamforming.prgSize = pdschInfo->beamPdschInfo.prgSize;
dlTtiReqPdu->u.pdsch_pdu.preCodingAndBeamforming.digBfInterfaces = pdschInfo->beamPdschInfo.digBfInterfaces;
* ****************************************************************/
uint16_t handleDlTtiReq(SlotIndInfo currTimingInfo)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint8_t idx;
uint8_t nPdu = 0;
uint8_t numPduEncoded = 0;
fillMsgHeader(&dlTtiReq->header, FAPI_DL_TTI_REQUEST, msgLen);
LwrMacSendToPhy(dlTtiReq->header.message_type_id, dlTtiReqMsgSize, (void *)dlTtiReq);
}
+ memset(currDlSlot, 0, sizeof(MacDlSlot));
return ROK;
}
else
{
DU_LOG("\nLWR_MAC: Failed to allocate memory for DL TTI Request");
+ memset(currDlSlot, 0, sizeof(MacDlSlot));
return RFAILED;
}
}
* ****************************************************************/
uint16_t sendTxDataReq(SlotIndInfo currTimingInfo, DlSchedInfo *dlInfo)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint8_t nPdu = 0;
uint32_t msgLen = 0;
uint16_t pduIndex = 0;
* Pointer to CurrUlSlot
* @return count
* ********************************************************************/
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint8_t getnPdus(fapi_ul_tti_req_t *ulTtiReq, MacUlSlot *currUlSlot)
{
uint8_t pduCount = 0;
- if(currUlSlot != NULLP)
- {
- if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_PRACH)
- {
- pduCount++;
- if(ulTtiReq)
- ulTtiReq->rachPresent = PDU_PRESENT;
- }
+ if(ulTtiReq && currUlSlot)
+ {
+ if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_PRACH)
+ {
+ pduCount++;
+ ulTtiReq->rachPresent = PDU_PRESENT;
+ }
if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_PUSCH)
{
- pduCount++;
- if(ulTtiReq)
- ulTtiReq->nUlsch++;
+ pduCount++;
+ ulTtiReq->nUlsch++;
}
if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_PUSCH_UCI)
{
pduCount++;
- if(ulTtiReq)
- ulTtiReq->nUlsch = PDU_PRESENT;
+ ulTtiReq->nUlsch = PDU_PRESENT;
}
if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_UCI)
{
pduCount++;
- if(ulTtiReq)
- ulTtiReq->nUlcch = PDU_PRESENT;
+ ulTtiReq->nUlcch = PDU_PRESENT;
}
if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_SRS)
{
void setNumCs(uint8_t *numCs, MacCellCfg *macCellCfg)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint8_t idx;
if(macCellCfg != NULLP)
{
* Pointer to msgLen
* ********************************************************************/
-#ifdef FAPI
+#ifdef INTEL_FAPI
void fillPrachPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg, MacUlSlot *currUlSlot, uint32_t *msgLen)
{
if(ulTtiReqPdu != NULLP)
sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_pusch_pdu_t)));
}
}
+
+void fillPucchPdu(fapi_ul_tti_req_pdu_t *ulTtiReqPdu, MacCellCfg *macCellCfg,\
+ MacUlSlot *currUlSlot, uint32_t *msgLen)
+{
+ if(ulTtiReqPdu != NULLP)
+ {
+ ulTtiReqPdu->pduType = PUCCH_PDU_TYPE;
+ ulTtiReqPdu->u.pucch_pdu.rnti = currUlSlot->ulInfo.schPucchInfo.rnti;
+ /* TODO : Fill handle in raCb when scheduling pucch and access here */
+ ulTtiReqPdu->u.pucch_pdu.handle = 100;
+ ulTtiReqPdu->u.pucch_pdu.bwpSize = macCellCfg->initialUlBwp.bwp.numPrb;
+ ulTtiReqPdu->u.pucch_pdu.bwpStart = macCellCfg->initialUlBwp.bwp.firstPrb;
+ ulTtiReqPdu->u.pucch_pdu.subCarrierSpacing = macCellCfg->initialUlBwp.bwp.scs;
+ ulTtiReqPdu->u.pucch_pdu.cyclicPrefix = macCellCfg->initialUlBwp.bwp.cyclicPrefix;
+ ulTtiReqPdu->u.pucch_pdu.formatType = currUlSlot->ulInfo.schPucchInfo.pucchFormat; /* Supporting PUCCH Format 0 */
+ ulTtiReqPdu->u.pucch_pdu.multiSlotTxIndicator = 0; /* No Multi Slot transmission */
+ ulTtiReqPdu->u.pucch_pdu.pi2Bpsk = 0; /* Disabled */
+ ulTtiReqPdu->u.pucch_pdu.prbStart = currUlSlot->ulInfo.schPucchInfo.fdAlloc.startPrb;
+ ulTtiReqPdu->u.pucch_pdu.prbSize = currUlSlot->ulInfo.schPucchInfo.fdAlloc.numPrb;
+ ulTtiReqPdu->u.pucch_pdu.startSymbolIndex = currUlSlot->ulInfo.schPucchInfo.tdAlloc.startSymb;
+ ulTtiReqPdu->u.pucch_pdu.nrOfSymbols = currUlSlot->ulInfo.schPucchInfo.tdAlloc.numSymb;
+ ulTtiReqPdu->u.pucch_pdu.freqHopFlag = 0; /* Disabled */
+ ulTtiReqPdu->u.pucch_pdu.secondHopPrb = 0;
+ ulTtiReqPdu->u.pucch_pdu.groupHopFlag = 0;
+ ulTtiReqPdu->u.pucch_pdu.sequenceHopFlag = 0;
+ ulTtiReqPdu->u.pucch_pdu.hoppingId = 0;
+ ulTtiReqPdu->u.pucch_pdu.initialCyclicShift = 0;
+ ulTtiReqPdu->u.pucch_pdu.dataScramblingId = 0; /* Valid for Format 2, 3, 4 */
+ ulTtiReqPdu->u.pucch_pdu.timeDomainOccIdx = 0; /* Valid for Format 1 */
+ ulTtiReqPdu->u.pucch_pdu.preDftOccIdx = 0; /* Valid for Format 4 */
+ ulTtiReqPdu->u.pucch_pdu.preDftOccLen = 0; /* Valid for Format 4 */
+ ulTtiReqPdu->u.pucch_pdu.addDmrsFlag = 0; /* Valid for Format 3, 4 */
+ ulTtiReqPdu->u.pucch_pdu.dmrsScramblingId = 0; /* Valid for Format 2 */
+ ulTtiReqPdu->u.pucch_pdu.dmrsCyclicShift = 0; /* Valid for Format 4 */
+ ulTtiReqPdu->u.pucch_pdu.srFlag = currUlSlot->ulInfo.schPucchInfo.srFlag;
+ ulTtiReqPdu->u.pucch_pdu.bitLenHarq = currUlSlot->ulInfo.schPucchInfo.numHarqBits;
+ ulTtiReqPdu->u.pucch_pdu.bitLenCsiPart1 = 0; /* Valid for Format 2, 3, 4 */
+ ulTtiReqPdu->u.pucch_pdu.bitLenCsiPart2 = 0; /* Valid for Format 2, 3, 4 */
+ ulTtiReqPdu->u.pucch_pdu.beamforming.numPrgs = 0; /* Not Supported */
+ ulTtiReqPdu->u.pucch_pdu.beamforming.prgSize = 0;
+ ulTtiReqPdu->u.pucch_pdu.beamforming.digBfInterfaces = 0;
+ ulTtiReqPdu->u.pucch_pdu.beamforming.pmi_bfi[0].pmIdx = 0;
+ ulTtiReqPdu->u.pucch_pdu.beamforming.pmi_bfi[0].beamIdx[0].beamidx = 0;
+
+ ulTtiReqPdu->pduSize = sizeof(fapi_ul_pucch_pdu_t);
+ SET_MSG_LEN(*msgLen, (sizeof(ulTtiReqPdu->pduType) + \
+ sizeof(ulTtiReqPdu->pduSize) + sizeof(fapi_ul_pucch_pdu_t)));
+ }
+}
+
#endif
/*******************************************************************
******************************************************************/
uint16_t handleUlTtiReq(SlotIndInfo currTimingInfo)
{
-#ifdef FAPI
+#ifdef INTEL_FAPI
uint8_t pduIdx = -1;
uint8_t numPdu = 0;
uint32_t msgLen = 0;
if(ulTtiReq != NULLP)
{
memset(ulTtiReq, 0, msgSize);
- ulTtiReq->sfn = currTimingInfo.sfn;
- ulTtiReq->slot = currTimingInfo.slot;
+ ulTtiReq->sfn = ulTtiReqTimingInfo.sfn;
+ ulTtiReq->slot = ulTtiReqTimingInfo.slot;
ulTtiReq->nPdus = getnPdus(ulTtiReq, currUlSlot);
ulTtiReq->nGroup = 0;
if(ulTtiReq->nPdus > 0)
pduIdx++;
fillPuschPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen);
}
-
+ /* Fill PUCCH PDU */
+ if(currUlSlot->ulInfo.dataType & SCH_DATATYPE_UCI)
+ {
+ pduIdx++;
+ fillPucchPdu(&ulTtiReq->pdus[pduIdx], &macCellCfg, currUlSlot, &msgLen);
+ }
if((currUlSlot->ulInfo.dataType & SCH_DATATYPE_PRACH) || \
- (currUlSlot->ulInfo.dataType & SCH_DATATYPE_PUSCH))
+ (currUlSlot->ulInfo.dataType & SCH_DATATYPE_PUSCH)|| \
+ (currUlSlot->ulInfo.dataType & SCH_DATATYPE_UCI))
{
msgLen += (sizeof(fapi_ul_tti_req_t) - sizeof(fapi_msg_t));
fillMsgHeader(&ulTtiReq->header, FAPI_UL_TTI_REQUEST, msgLen);
DU_LOG("\nLWR_MAC: Sending UL TTI Request");
LwrMacSendToPhy(ulTtiReq->header.message_type_id, msgSize, (void *)ulTtiReq);
}
- memset(&currUlSlot, 0, sizeof(MacUlSlot));
+ memset(currUlSlot, 0, sizeof(MacUlSlot));
return ROK;
}
else
{
DU_LOG("\nLWR_MAC: Failed to allocate memory for UL TTI Request");
- memset(&currUlSlot, 0, sizeof(MacUlSlot));
+ memset(currUlSlot, 0, sizeof(MacUlSlot));
return RFAILED;
}
}