+/*
+ * 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 convertFreqDomRsrcMapToIAPIFormat(uint8_t *sourceBitMap, uint8_t *destBitMap)
+{
+ int8_t idx;
+ uint8_t numBitsToShift = 0;
+ uint64_t freqDomainResources = 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--)
+ {
+ freqDomainResources |= ((uint64_t)sourceBitMap[idx] << numBitsToShift);
+ numBitsToShift += 8;
+ }
+
+ /* Right shift 3 bits because bits[2-0] are unused in sourceBitMap[5] */
+ freqDomainResources = freqDomainResources >> 3;