X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Flwr_mac_util.c;h=0fd3358befb12862b5b982bd9b6f363f32b936db;hb=df97420828852456256f46cfb7b921c12bd9285e;hp=7071432acbf1ed3df59b61414ac2118ad3315fca;hpb=a42c1300602c311dd44fd1e5595dcf6f9f9e1e5d;p=o-du%2Fl2.git diff --git a/src/5gnrmac/lwr_mac_util.c b/src/5gnrmac/lwr_mac_util.c index 7071432ac..0fd3358be 100644 --- a/src/5gnrmac/lwr_mac_util.c +++ b/src/5gnrmac/lwr_mac_util.c @@ -18,16 +18,7 @@ /* This file contains all utility functions for MAC CL */ -#include "stdio.h" -#include "envopt.h" -#include "envdep.h" -#include "envind.h" -#include "gen.h" -#include "ssi.h" -#include "cm_hash.h" -#include "gen.x" -#include "ssi.x" -#include "cm_hash.x" +#include "common_def.h" #include "lwr_mac.h" /******************************************************************* @@ -46,22 +37,22 @@ * NULLP - failure * * ****************************************************************/ -PUBLIC ClCellCb * rgClUtlGetCellCb +LwrMacCellCb * lwrMacGetCellCb ( - U16 cellId + uint16_t cellId ) { - ClCellCb *cellCb; + LwrMacCellCb *cellCb; - if(cellId >= MAX_NUM_CELL_SUPP) + if(cellId >= MAX_NUM_CELL) { - printf("\n Invalid Cell Id [%d]. rgClUtlGetCellCb failed.", cellId); - RETVALUE(NULLP); + DU_LOG("\nERROR --> Invalid Cell Id [%d]. rgClUtlGetCellCb failed.", cellId); + return NULLP; } - - cmHashListFind((CmHashListCp *)&clGlobalCp.cellCbLst, (U8 *)&cellId, sizeof(U16), 0, (PTR *)&cellCb); - RETVALUE(cellCb); + cellCb = &lwrMacCb.cellCb[cellId -1]; + + return cellCb; } /******************************************************************* @@ -83,11 +74,11 @@ PUBLIC ClCellCb * rgClUtlGetCellCb uint32_t reverseBits(uint32_t num, uint8_t numBits) { uint32_t reverse_num = 0; - int i; - for (i = 0; i < numBits; i++) + uint8_t bitIdx; + for (bitIdx = 0; bitIdx < numBits; bitIdx++) { - if((num & (1 << i))) - reverse_num |= 1 << ((numBits - 1) - i); + if((num & (1 << bitIdx))) + reverse_num |= 1 << ((numBits - 1) - bitIdx); } return reverse_num; } @@ -113,7 +104,7 @@ uint32_t reverseBits(uint32_t num, uint8_t numBits) * ****************************************************************/ void fillDlDciPayload(uint8_t *buf, uint8_t *bytePos, uint8_t *bitPos,\ - uint32_t val, uint8_t valSize) + uint32_t val, uint8_t valSize) { uint8_t temp; uint8_t bytePart1; @@ -144,8 +135,59 @@ void fillDlDciPayload(uint8_t *buf, uint8_t *bytePos, uint8_t *bitPos,\ } } +/* + * 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; + /* Filling destBitMap such that LSB bit 0 of freqDomainResources maps to LSB + * of first word of destBitMap */ + numBitsToShift = 0; + for(idx=0; idx> numBitsToShift; + numBitsToShift += 8; + } +} /********************************************************************** - End of file -**********************************************************************/ + End of file + **********************************************************************/