From: svaidhya Date: Fri, 8 Dec 2023 19:21:58 +0000 (+0530) Subject: [Epic-ID: ODUHIGH-517][Task-ID: ODUHIGH-539][SubTask-Id: ODUHIGH-544] Multi UE| DL... X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=e6cf50fe5be43291899cae7a1a24af906901ceff;p=o-du%2Fl2.git [Epic-ID: ODUHIGH-517][Task-ID: ODUHIGH-539][SubTask-Id: ODUHIGH-544] Multi UE| DL Candidate Selection| CCE Index calculation | Y calculation Change-Id: I80ad4de6aad8a723e6c0aa65a7322ab01df4141a Signed-off-by: svaidhya --- diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 3c7591eac..b5e1f935e 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -480,6 +480,7 @@ typedef struct schPdcchInfo uint8_t nrOfPRBPerCce; /*CCE Size*/ uint8_t totalCceCount; /*Count of CCE in this CORESET*/ uint8_t cqiIndxAggLvlMap[MAX_NUM_CQI_IDX];/*Agg Level to be used for each CQI Index*/ + uint32_t *y; /*Coefficient variable to calculate CCE Index as per 3gpp Spec 38.213 Sec 10.1*/ }SchPdcchInfo; /** diff --git a/src/5gnrsch/sch_utils.c b/src/5gnrsch/sch_utils.c index 34aa8461e..84a2e7ef8 100644 --- a/src/5gnrsch/sch_utils.c +++ b/src/5gnrsch/sch_utils.c @@ -2005,6 +2005,74 @@ void fillCqiAggLvlMapping(SchPdcchInfo *pdcchInfo) } } +/* + * @brief Function to calculate Value Y + * + * Function: schCalY + * + * Calculates value of YpKp as per [10.1,TS38.213]. + * A0 is for first CS, A1 for second CS and A2 is for third CS + * + * @params[in]: coresetId and Previous Y + * */ +uint32_t schCalY(uint8_t csId, uint32_t prevY) +{ + uint32_t A0 = 39827, A1 = 39829, A2 = 39839; + uint32_t D = 65537; + + switch(csId % 3) + { + case 0: + { + return((A0 * prevY) % D); + } + case 1: + { + return((A1 * prevY) % D); + } + case 2: + { + return((A2 * prevY) % D); + } + default: + { + DU_LOG("\nERROR --> SCH: Issue in calculating value of Y"); + return(0); + } + } + return 0; +} + +/* + * @brief Function to calculate the value Y used for CCE Index formula + * + * Function: schUpdValY + * + * As per Spec 38.213, Sec 10.1 Formula for CCE Index contains a coefficient + * value called 'Y' and storing the same in the ueCb which will be later used + * in pdcch allocation + * + * @params[in] : SchUeCb, PdcchInfo + * + * */ +void schUpdValY(SchUeCb *ueCb, SchPdcchInfo *pdcchInfo) +{ + uint8_t slotIdx = 0; + + SCH_ALLOC(pdcchInfo->y, (sizeof(uint32_t) * ueCb->cellCb->numSlots)); + + for(slotIdx= 0 ; slotIdx < ueCb->cellCb->numSlots; slotIdx++) + { + if(slotIdx == 0) + { + pdcchInfo->y[slotIdx] = schCalY(pdcchInfo->cRSetRef->cRSetId, ueCb->crnti); + } + else + { + pdcchInfo->y[slotIdx] = schCalY(pdcchInfo->cRSetRef->cRSetId, pdcchInfo->y[slotIdx - 1]); + } + } +} /********************************************************************** End of file **********************************************************************/ diff --git a/src/5gnrsch/sch_utils.h b/src/5gnrsch/sch_utils.h index c9edbad14..b562f126f 100644 --- a/src/5gnrsch/sch_utils.h +++ b/src/5gnrsch/sch_utils.h @@ -139,6 +139,7 @@ void schDeleteFromPageInfoList(CmLListCp *list, CmLList *node); uint8_t countRBGFrmCoresetFreqRsrc(uint8_t *freqDomainRsrc); uint8_t findSsStartSymbol(uint8_t *mSymbolsWithinSlot); void fillCqiAggLvlMapping(SchPdcchInfo *pdcchInfo); +void schUpdValY(SchUeCb *ueCb, SchPdcchInfo *pdcchInfo); #if 0 /*Will be enabled for debugging*/ void printLcLL(CmLListCp *lcLL);