#include "lrg.x" /* layer management typedefs for MAC */
#include "mac_sch_interface.h"
#include "sch.h"
+#include "sch_tmr.h"
#include "sch_utils.h"
#include "math.h"
/* Check if requested number of blocks can be allocated from the current block */
if(freeBlock->numFreePrb < numPrb)
+ {
+ DU_LOG("\nINFO --> SCH: In isPrbAvailable, numFreePrb:%d is less than reqPrb:%d", freeBlock->numFreePrb, numPrb);
+ node = node->next;
continue;
-
+ }
+
/* Check if requested PRBs belong within the range of current free block */
if(((startPrb >= freeBlock->startPrb) && (startPrb <= freeBlock->endPrb)) && \
((endPrb >= freeBlock->startPrb) && (endPrb <= freeBlock->endPrb)))
}
#endif
-/*
- * As per FAPI spec,
- * Frequency domain resources is a bitmap defining non-overlapping groups of 6 PRBs in ascending order.
- * [TS38.213 10.1]. Bitmap of uint8 array. 45 bits.
- *
- * As per IAPI,
- * CORESET-freqdom.frequencyDomainResources : The bits of the bitmap have a one-to-one mapping with
- * non-overlapping groups of 6 RBs. The most significant bit of the first word corresponds to
- * the most significant bit defined in 38.331.
- *
- * FAPI and IAPI both are 45 bits. Mapped from bit 0 LS Byte for the FAPI and
- * bit 0 LS U32 entry for IAPI.
- * FAPI is to be filled in following format such that Intel L1 is able to decode it :
- *
- * FAPI IAPI
- * FreqDomainResource[0] bits 7-0 -> nFreqDomain[0] bits 7-0
- * FreqDomainResource[1] bits 7-0 -> nFreqDomain[0] bits 15-8
- * FreqDomainResource[2] bits 7-0 -> nFreqDomain[0] bits 23-16
- * FreqDomainResource[3] bits 7-0 -> nFreqDomain[0] bits 31-24
- * FreqDomainResource[4] bits 7-0 -> nFreqDomain[1] bits 7-0
- * FreqDomainResource[5] bits 7-0 -> nFreqDomain[1] bits 15-8
- *
- * where for the last entry bits 7,6 and 5 are don't care in the FAPI and bits
- * 31-13 are don't care in the IAPI.
- */
-void covertFreqDomRsrcMapToIAPIFormat(uint8_t *sourceBitMap, uint8_t *destBitMap)
+/**
+ * @brief Function to find start Symbol Index of Coreset defined in SearchSpace(SS)
+ *
+ * @details
+ *
+ * Function: findSsStartSymbol
+ *
+ * This function finds first the startSymbol Index of a CORESET
+ * which is defined in SearchSpace.monitoringSymbolWithinSlot parameter
+ *
+ * @param[in] uint8_t mSymbolsWithinSlot[2]
+ * mSymbolsWithinSlot[0] >> MSB as 7th Symbol to LSB as 0th Symbol
+ * mSymbolsWithinSlot[1] >> 0th bit as 8th Symbol, 1st bit as 9th,
+ * ...,5th bit as 13th symbol
+ * @return Success : First SS Symbol Index
+ * Failure : MAX_SYMB_PER_SLOT(Invalid value of SymbolIndex = 14)
+**/
+uint8_t findSsStartSymbol(uint8_t *mSymbolsWithinSlot)
{
- int8_t idx;
- uint8_t numBitsToShift = 0;
- uint64_t freqDomainResources = 0;
+ uint8_t symbolIdx = 0;
+ uint8_t i = 1, symPos = 0;
- /* Bit operation to create a 64-bit integer that has
- * 48 LSBs [Bit 47 to Bit 0] mapped to sourceBitMap[0] to sourceBitMap[5]
- */
- for(idx = FREQ_DOM_RSRC_SIZE-1; idx >=0; idx--)
+ for(symbolIdx = 0; symbolIdx < MONITORING_SYMB_WITHIN_SLOT_SIZE; symbolIdx++)
{
- freqDomainResources |= ((uint64_t)sourceBitMap[idx] << numBitsToShift);
- numBitsToShift += 8;
+ i = 1, symPos = 0;
+ while(i)
+ {
+ /*The first Symbol(or bit) enabled(set) is the StartSymbol of SS thus
+ *returning if we find that bitPosition */
+ if(mSymbolsWithinSlot[symbolIdx] & i)
+ {
+ /*Adding (SymbolIdx*8) for SymbolIndex between 8 and 13*/
+ return (symPos + (symbolIdx * 8));
+ }
+ i = i << 1;
+ symPos++;
+ }
}
+ return(MAX_SYMB_PER_SLOT);
+}
- /* Right shift 3 bits because bits[2-0] are unused in sourceBitMap[5] */
- freqDomainResources = freqDomainResources >> 3;
+/**
+ * @brief Function to count number of RBG from Coreset's FreqDomainResource
+ *
+ * @details
+ *
+ * Function: countRBGFrmCoresetFreqRsrc
+ *
+ * This function counts RBG for calculating the coresetSize using CORESET.freqDomainResource
+ * In this, we will find the number of RBG groups which are allowed for this
+ * coreset
+ *
+ * @param[in] uint8_t freqDomainRsrc[6] (As per Spec 38.331, ControlResourceSet.frequencyDomainResources)
+ * freqDomainRsrc[0] =RBG0 to RBG7
+ * freqDomainRsrc[1] =RBG8 to RBG15
+ * ...
+ * freqDomainRsrc[5] =RBG40 to RBG47
+ * (Every RBG has 6 PRBs)
+ * @return Success : Total Number of RGBs in CORESET which can be allocated
+ * Failure : 0
+**/
+uint8_t countRBGFrmCoresetFreqRsrc(uint8_t *freqDomainRsrc)
+{
+ uint8_t freqIdx = 0, idx = 1;
+ uint8_t count = 0;
- /* Filling destBitMap such that LSB bit 0 of freqDomainResources maps to LSB
- * of first word of destBitMap */
- numBitsToShift = 0;
- for(idx=0; idx<FREQ_DOM_RSRC_SIZE; idx++)
+ for(freqIdx = 0; freqIdx < FREQ_DOM_RSRC_SIZE; freqIdx++)
{
- destBitMap[idx] = freqDomainResources >> numBitsToShift;
- numBitsToShift += 8;
+ if(freqDomainRsrc[freqIdx] & 0xFF)
+ {
+ idx = 1;
+ count = 0;
+ while(idx)
+ {
+ if(freqDomainRsrc[freqIdx] & idx)
+ {
+ count++;
+ }
+ idx = idx << 1;
+ }
+ }
}
+ return count;
}
+
/**********************************************************************
End of file
**********************************************************************/