From: lal.harshita Date: Tue, 24 Aug 2021 14:27:43 +0000 (+0530) Subject: Encoding of MSG3 UL grant in RAR PDU [Issue-ID: ODUHIGH-342] X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=79661a503b0e6bcbe20fe0e19eb920110ab35242;p=o-du%2Fl2.git Encoding of MSG3 UL grant in RAR PDU [Issue-ID: ODUHIGH-342] Change-Id: Iaac7c2a9c20c2fec95033ed5195bf1bd4db3309c Signed-off-by: lal.harshita --- diff --git a/src/5gnrmac/lwr_mac_phy.c b/src/5gnrmac/lwr_mac_phy.c index ac87d0b42..15a6cb5cb 100644 --- a/src/5gnrmac/lwr_mac_phy.c +++ b/src/5gnrmac/lwr_mac_phy.c @@ -272,10 +272,11 @@ uint8_t LwrMacSendToL1(void *msg) uint8_t ret = ROK; #ifdef INTEL_FAPI uint16_t msgLen =0; - char message[100]; p_fapi_api_queue_elem_t currMsg = NULLP; #ifdef CALL_FLOW_DEBUG_LOG + char message[100]; + currMsg = (p_fapi_api_queue_elem_t)msg; while(currMsg) { diff --git a/src/5gnrmac/mac.h b/src/5gnrmac/mac.h index 246c8ae62..6064e58e4 100644 --- a/src/5gnrmac/mac.h +++ b/src/5gnrmac/mac.h @@ -50,6 +50,24 @@ #define MAC_LCID_CRI 62 #define MAC_LCID_PADDING 63 +/* Definitions for size of RAR PDU contents (in bits). + * Refer spec 38.321, sections 6.1.4, 6.2.2 and 6.2.3*/ +#define E_BIT_SIZE 1 +#define T_BIT_SIZE 1 +#define R_BIT_SIZE 1 +#define RAPID_SIZE 6 +#define LC_ID_SIZE 6 +#define TIMING_ADVANCE_SIZE 12 +#define T_CRNTI_SIZE 16 +/* UL Grant is of size = 27 bits. Refer to Spec 38.213, Table 8.2-1 for + * contents of UL grant in RAR */ +#define FREQ_HOP_FLAG_SIZE 1 +#define FREQ_RSRC_ALLOC_SIZE 14 +#define TIME_RSRC_ALLOC_SIZE 4 +#define MCS_SIZE 4 +#define TPC_COMMAND_SIZE 3 +#define CSI_REQUEST_SIZE 1 + typedef struct macCellCb MacCellCb; typedef enum diff --git a/src/5gnrmac/mac_cfg_hdl.c b/src/5gnrmac/mac_cfg_hdl.c index 2524a00a7..074556d49 100644 --- a/src/5gnrmac/mac_cfg_hdl.c +++ b/src/5gnrmac/mac_cfg_hdl.c @@ -200,7 +200,7 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) { SchCellCfg schCellCfg; Pst cfgPst; - uint8_t idx=0, ret=0; + uint8_t ssbMaskIdx = 0, rsrcListIdx = 0, ret=0; memset(&cfgPst, 0, sizeof(Pst)); memset(&schCellCfg, 0, sizeof(SchCellCfg)); @@ -218,9 +218,9 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) schCellCfg.ssbSchCfg.ssbOffsetPointA = macCellCfg->ssbCfg.ssbOffsetPointA; schCellCfg.ssbSchCfg.ssbPeriod = ssbPeriodicity[macCellCfg->ssbCfg.ssbPeriod]; schCellCfg.ssbSchCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset; - for(uint8_t idx=0; idxssbCfg.ssbMask[idx]; + schCellCfg.ssbSchCfg.nSSBMask[ssbMaskIdx] = macCellCfg->ssbCfg.ssbMask[ssbMaskIdx]; } /* fill SIB1 scheduler parameters */ @@ -273,16 +273,16 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16 = macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16; schCellCfg.schInitialDlBwp.pdschCommon.numTimeDomAlloc = macCellCfg->initialDlBwp.pdschCommon.numTimeDomAlloc; - for(idx = 0; idxinitialDlBwp.pdschCommon.numTimeDomAlloc; idx++) + for(rsrcListIdx = 0; rsrcListIdxinitialDlBwp.pdschCommon.numTimeDomAlloc; rsrcListIdx++) { - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0 = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].startSymbol; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].lengthSymbol; + schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0 = + macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0; + schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = + macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; + schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = + macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; + schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].lengthSymbol = + macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].lengthSymbol; } /* fill initial UL BWP */ @@ -292,16 +292,16 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) schCellCfg.schInitialUlBwp.bwp.cyclicPrefix = macCellCfg->initialUlBwp.bwp.cyclicPrefix; schCellCfg.schInitialUlBwp.puschCommon.numTimeDomRsrcAlloc = \ macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; - for(idx = 0; idx < macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; idx++) + for(rsrcListIdx = 0; rsrcListIdx < macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; rsrcListIdx++) { - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].k2 = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].k2; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].mappingType = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].mappingType; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].startSymbol = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].startSymbol; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[idx].symbolLength = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[idx].symbolLength; + schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2 = + macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2; + schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = + macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; + schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = + macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; + schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength = + macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength; } #ifdef NR_TDD memcpy(&schCellCfg.tddCfg, &macCellCfg->tddCfg, sizeof(TDDCfg)); diff --git a/src/5gnrmac/mac_mux.c b/src/5gnrmac/mac_mux.c index f55fb08bf..affdac2e7 100644 --- a/src/5gnrmac/mac_mux.c +++ b/src/5gnrmac/mac_mux.c @@ -97,44 +97,31 @@ void packBytes(uint8_t *buf, uint16_t *bytePos, uint8_t *bitPos, uint32_t val, u void fillRarPdu(RarInfo *rarInfo) { uint8_t *rarPdu = rarInfo->rarPdu; - uint16_t bytePos= 0; uint8_t bitPos = 0; + uint16_t bytePos= 0, bwpSize = 0, rbStart = 0, rbLen = 0; + uint8_t numHopInfoBitsInFreqAlloc = 0; + uint8_t actualFreqRsrcAllocSize = 0; /* RAR subheader fields */ uint8_t EBit = 0; uint8_t TBit = 0; - uint8_t rapId = 0; /* RAR payload fields */ uint8_t RBit = 0; - uint16_t timeAdv = 0; - uint32_t ulGrant = 0; - uint16_t tmpCrnti = 0; + uint16_t msg3FreqResource = 0; uint8_t paddingLcid = 63; - /* Size(in bits) of RAR subheader files */ - uint8_t EBitSize = 1; - uint8_t TBitSize = 1; - uint8_t rapidSize = 6; - uint8_t paddingLcidSize = 6; + /* Considering 2 bytes of padding in RAR PDU. + * 1st byte is MAC sub-header for padding + * 2nd byte contains padding bits + */ uint8_t paddingSize = 8; - - /* Size(in bits) of RAR payload fields */ - uint8_t RBitSize = 1; - uint8_t timeAdvSize = 12; - uint8_t ulGrantSize = 27; - uint8_t tmpCrntiSize = 16; - /* Fill RAR pdu fields */ EBit = 0; TBit = 1; - rapId = rarInfo->RAPID; - RBit = 0; - timeAdv = rarInfo->ta; - ulGrant = 0; /* this will be done when implementing msg3 */ - tmpCrnti = rarInfo->tcrnti; + rarInfo->rarPduLen = RAR_PAYLOAD_SIZE; /* Initialize buffer */ @@ -145,17 +132,78 @@ void fillRarPdu(RarInfo *rarInfo) bitPos = 7; /* Packing fields into RAR PDU */ - packBytes(rarPdu, &bytePos, &bitPos, EBit, EBitSize); - packBytes(rarPdu, &bytePos, &bitPos, TBit, TBitSize); - packBytes(rarPdu, &bytePos, &bitPos, rapId, rapidSize); - packBytes(rarPdu, &bytePos, &bitPos, RBit, RBitSize); - packBytes(rarPdu, &bytePos, &bitPos, timeAdv, timeAdvSize); - packBytes(rarPdu, &bytePos, &bitPos, ulGrant, ulGrantSize); - packBytes(rarPdu, &bytePos, &bitPos, tmpCrnti, tmpCrntiSize); + packBytes(rarPdu, &bytePos, &bitPos, EBit, E_BIT_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, TBit, T_BIT_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->RAPID, RAPID_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, RBit, R_BIT_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ta, TIMING_ADVANCE_SIZE); + + /* Packing MSG3 UL Grant in RAR */ + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ulGrant.freqHopFlag, FREQ_HOP_FLAG_SIZE); + + /* Calculating freq domain resource allocation field value + * bwpSize = Size of BWP + * RBStart = Starting Resource block + * RBLen = length of contiguously allocted RBs + * Spec 38.214 Sec 6.1.2.2.2 + */ + bwpSize = rarInfo->ulGrant.bwpSize; + rbStart = rarInfo->ulGrant.msg3FreqAlloc.startPrb; + rbLen = rarInfo->ulGrant.msg3FreqAlloc.numPrb; + + if((rbLen >=1) && (rbLen <= bwpSize - rbStart)) + { + if((rbLen - 1) <= floor(bwpSize / 2)) + msg3FreqResource = (bwpSize * (rbLen-1)) + rbStart; + else + msg3FreqResource = (bwpSize * (bwpSize - rbLen + 1)) \ + + (bwpSize - 1 - rbStart); + } + + /* Calculating frequency domain resource allocation field size + * and packing frequency domain resource allocation accordingly + * Spec 38.213 Sec 8.3 + */ + if(bwpSize < 180) + { + actualFreqRsrcAllocSize = ceil(log2(bwpSize * (bwpSize + 1) / 2)); + packBytes(rarPdu, &bytePos, &bitPos, 0, FREQ_RSRC_ALLOC_SIZE - actualFreqRsrcAllocSize); + packBytes(rarPdu, &bytePos, &bitPos, msg3FreqResource, actualFreqRsrcAllocSize); + } + else + { + if(rarInfo->ulGrant.freqHopFlag == 0) + { + numHopInfoBitsInFreqAlloc = 1; + packBytes(rarPdu, &bytePos, &bitPos, 0, numHopInfoBitsInFreqAlloc); + + actualFreqRsrcAllocSize = abs(log2(bwpSize * (bwpSize + 1) / 2)); + packBytes(rarPdu, &bytePos, &bitPos, 0, actualFreqRsrcAllocSize - FREQ_RSRC_ALLOC_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, msg3FreqResource, \ + actualFreqRsrcAllocSize - numHopInfoBitsInFreqAlloc); + } + else + { + /* TODO : If frequency hopping is supported, + * Fetch the Number of bits to store hopping information in frequency + * resource allocation field and the value to be filled from Spec 38.213, Table 8.3-1. + * Fill the frequency resource allocation field as described in Spec 38.213 sec 8.3 + */ + } + } + + /* Packing time domain resource allocation for UL grant */ + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ulGrant.k2Index, TIME_RSRC_ALLOC_SIZE); + + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ulGrant.mcs, MCS_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ulGrant.tpc, TPC_COMMAND_SIZE); + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->ulGrant.csiReq, CSI_REQUEST_SIZE); + + packBytes(rarPdu, &bytePos, &bitPos, rarInfo->tcrnti, T_CRNTI_SIZE); /* padding of 2 bytes */ - packBytes(rarPdu, &bytePos, &bitPos, RBit, RBitSize*2); - packBytes(rarPdu, &bytePos, &bitPos, paddingLcid, paddingLcidSize); + packBytes(rarPdu, &bytePos, &bitPos, RBit, R_BIT_SIZE*2); + packBytes(rarPdu, &bytePos, &bitPos, paddingLcid, LC_ID_SIZE); packBytes(rarPdu, &bytePos, &bitPos, 0, paddingSize); } diff --git a/src/5gnrmac/rg_cfg.c b/src/5gnrmac/rg_cfg.c index 64a66d3b4..e45326b92 100755 --- a/src/5gnrmac/rg_cfg.c +++ b/src/5gnrmac/rg_cfg.c @@ -603,7 +603,8 @@ RgErrInfo *errInfo SuId rguUlSapId = 0; SuId rguDlSapId = 0; /* RLC SAP to allocate flowCntrlInd buffer*/ - Pst *pst ; + /* Commented below to resolve compilation warning */ + //Pst *pst ; errInfo->errCause = RGERR_CFG_CRG_CELL_CFG; @@ -686,7 +687,8 @@ RgErrInfo *errInfo rgUpdtCellCnt(inst,RG_CFG_ADD); errInfo->errCause = RGERR_NONE; - pst = &rgCb[inst].rguSap[rguDlSapId].sapCfg.sapPst; + /* Commented below to resolve compilation warning */ + //pst = &rgCb[inst].rguSap[rguDlSapId].sapCfg.sapPst; /* Allocate a buffer for flowCntrlInd.*/ MAC_ALLOC(cell->flowCntrlInd, sizeof(RguFlowCntrlInd)); if(cell->flowCntrlInd == NULLP) diff --git a/src/5gnrmac/rg_utl.c b/src/5gnrmac/rg_utl.c index 6ec985d13..fbc659e22 100755 --- a/src/5gnrmac/rg_utl.c +++ b/src/5gnrmac/rg_utl.c @@ -239,8 +239,6 @@ Size size /* size */ ) { - S16 ret; - if ((data == NULLP) || (*data == NULLP) || (size == 0)) { return; @@ -286,8 +284,6 @@ Size size /* size */ ) { - S16 ret; - if ((data == NULLP) || (*data == NULLP) || (size == 0)) { return; diff --git a/src/5gnrsch/rg_sch_utl.c b/src/5gnrsch/rg_sch_utl.c index f7b8ce7d3..0e0e03729 100755 --- a/src/5gnrsch/rg_sch_utl.c +++ b/src/5gnrsch/rg_sch_utl.c @@ -4034,8 +4034,6 @@ Size size /* size */ ) { - S16 ret; - if ((data == NULLP) || (*data == NULLP) || (size == 0)) { return; diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index e7bafd6c8..77e736f1b 100644 --- a/src/5gnrsch/sch_rach.c +++ b/src/5gnrsch/sch_rach.c @@ -105,11 +105,10 @@ void createSchRaCb(uint16_t tcrnti, Inst schInst) * @param[out] msg3NumRb * @return void **/ -uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ - uint16_t *msg3StartRb, uint8_t *msg3NumRb, uint16_t msg3SlotAlloc) +SchPuschInfo* schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, uint16_t msg3SlotAlloc) { - SchCellCb *cell = NULLP; - SchUlSlotInfo *schUlSlotInfo = NULLP; + SchCellCb *cell = NULLP; + SchUlSlotInfo *schUlSlotInfo = NULLP; uint8_t startSymb = 0; uint8_t symbLen = 0; uint8_t startRb = 0; @@ -142,7 +141,7 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ if(!schUlSlotInfo->schPuschInfo) { DU_LOG("\nERROR --> SCH : Memory allocation failed in schAllocMsg3Pusch"); - return RFAILED; + return NULLP; } tbSize = 0; /* since nPrb has been incremented, recalculating tbSize */ tbSize = schCalcTbSizeFromNPrb(numRb, mcs, numPdschSymbols); @@ -164,9 +163,7 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ schUlSlotInfo->schPuschInfo->nrOfDmrsSymbols = NUM_DMRS_SYMBOLS; schUlSlotInfo->schPuschInfo->dmrsAddPos = DMRS_ADDITIONAL_POS; - *msg3StartRb = startRb; - *msg3NumRb = numRb; - return ROK; + return schUlSlotInfo->schPuschInfo; } /** @@ -184,15 +181,12 @@ uint8_t schAllocMsg3Pusch(Inst schInst, uint16_t slot, uint16_t crnti, \ void schProcessRaReq(SlotTimingInfo currTime, SchCellCb *cell) { uint8_t ueIdx = 0; + SchPuschInfo *msg3PuschInfo; RarInfo *rarInfo = NULLP; - uint16_t raRnti = 0; - uint16_t rarSlot = 0; - uint16_t msg3StartRb; - uint8_t msg3NumRb; - uint8_t ret = ROK; uint8_t delta = 0; - uint8_t k2 = 0; + uint8_t k2Index = 0, k2 = 0; uint8_t puschMu = 0; + uint16_t rarSlot = 0; uint16_t msg3Slot = 0; #ifdef NR_TDD uint16_t slotIdx = 0; @@ -208,7 +202,7 @@ void schProcessRaReq(SlotTimingInfo currTime, SchCellCb *cell) //puschMu = cell->cellCfg.puschMu; delta = puschDeltaTable[puschMu]; - k2 = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[0].k2; + k2 = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[k2Index].k2; /* RAR will sent with a delay of RAR_DELAY */ rarSlot = (currTime.slot + RAR_DELAY + PHY_DELTA_DL) % cell->numSlots; @@ -253,16 +247,25 @@ void schProcessRaReq(SlotTimingInfo currTime, SchCellCb *cell) createSchRaCb(cell->raReq[ueIdx]->rachInd->crnti, cell->instIdx); /* allocate resources for msg3 */ - ret = schAllocMsg3Pusch(cell->instIdx, rarSlot, cell->raReq[ueIdx]->rachInd->crnti, &msg3StartRb, &msg3NumRb, msg3Slot); - if(ret == ROK) + msg3PuschInfo = schAllocMsg3Pusch(cell->instIdx, rarSlot, cell->raReq[ueIdx]->rachInd->crnti, msg3Slot); + if(msg3PuschInfo) { /* fill RAR info */ - rarInfo->raRnti = cell->raReq[ueIdx]->raRnti; - rarInfo->tcrnti = cell->raReq[ueIdx]->rachInd->crnti; - rarInfo->RAPID = cell->raReq[ueIdx]->rachInd->preambleIdx; - rarInfo->ta = cell->raReq[ueIdx]->rachInd->timingAdv; - rarInfo->msg3FreqAlloc.startPrb = msg3StartRb; - rarInfo->msg3FreqAlloc.numPrb = msg3NumRb; + rarInfo->raRnti = cell->raReq[ueIdx]->raRnti; + rarInfo->tcrnti = cell->raReq[ueIdx]->rachInd->crnti; + rarInfo->RAPID = cell->raReq[ueIdx]->rachInd->preambleIdx; + rarInfo->ta = cell->raReq[ueIdx]->rachInd->timingAdv; + rarInfo->ulGrant.bwpSize = cell->cellCfg.schInitialUlBwp.bwp.freqAlloc.numPrb; + /* Spec 38.213, section 8.2, 0 : MSG3 PUSCH will be transmitted without frequency hopping */ + rarInfo->ulGrant.freqHopFlag = 0; + rarInfo->ulGrant.msg3FreqAlloc.startPrb = msg3PuschInfo->fdAlloc.startPrb; + rarInfo->ulGrant.msg3FreqAlloc.numPrb = msg3PuschInfo->fdAlloc.numPrb; + rarInfo->ulGrant.k2Index = k2Index; + rarInfo->ulGrant.mcs = msg3PuschInfo->tbInfo.mcs; + rarInfo->ulGrant.tpc = 3; /* TODO : Check appropriate value to be filled */ + /* Spec 38.213, section 8.2 : In a contention based random access + * procedure, the CSI request field is reserved. */ + rarInfo->ulGrant.csiReq = 0; } SCH_FREE(cell->raReq[ueIdx]->rachInd, sizeof(RachIndInfo)); diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 31dd8a73b..f973b83e5 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -754,12 +754,23 @@ typedef struct dlBrdcstAlloc Sib1AllocInfo sib1Alloc; }DlBrdcstAlloc; +typedef struct msg3UlGrant +{ + uint8_t freqHopFlag; + uint16_t bwpSize; + FreqDomainAlloc msg3FreqAlloc; + uint8_t k2Index; + uint8_t mcs; + uint8_t tpc; + uint8_t csiReq; +}Msg3UlGrant; + typedef struct rarInfo { uint16_t raRnti; uint8_t RAPID; uint16_t ta; - FreqDomainAlloc msg3FreqAlloc; + Msg3UlGrant ulGrant; uint16_t tcrnti; uint8_t rarPdu[RAR_PAYLOAD_SIZE]; uint8_t rarPduLen;