Merge "[Epic-ID: ODUHIGH-556][Task-ID: ODUHIGH-559]Correction in PUCCH allocation"
authorSangeeta Vaidhyanathan <svaidhya@radisys.com>
Tue, 20 Feb 2024 10:16:31 +0000 (10:16 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Tue, 20 Feb 2024 10:16:31 +0000 (10:16 +0000)
1  2 
src/du_app/du_cfg.c
src/du_app/du_cfg.h

diff --combined src/du_app/du_cfg.c
  /* This file contains all utility functions */
  #include "common_def.h"
  
 -#ifdef XML_BASED_CONFIG
  #include <libxml/parser.h>
  #include <libxml/tree.h>
  #include <libxml/xmlmemory.h>
  #include <arpa/inet.h>
 -#endif
  
  #include "du_tmr.h"
  #include "legtp.h"
@@@ -255,7 -257,7 +255,7 @@@ uint8_t readMacCfg(
  
     /* fill Intial DL BWP */
     duCfgParam.macCellCfg.cellCfg.initialDlBwp.bwp.firstPrb = 0;
-    duCfgParam.macCellCfg.cellCfg.initialDlBwp.bwp.numPrb = TOTAL_PRB_20MHZ_MU0; /* configured to total BW */
+    duCfgParam.macCellCfg.cellCfg.initialDlBwp.bwp.numPrb = MAX_NUM_RB; /* configured to total BW */
     duCfgParam.macCellCfg.cellCfg.initialDlBwp.bwp.scs = duCfgParam.macCellCfg.ssbCfg.scsCmn;
     duCfgParam.macCellCfg.cellCfg.initialDlBwp.bwp.cyclicPrefix = NORMAL_CYCLIC_PREFIX;
     duCfgParam.macCellCfg.cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId = SEARCHSPACE_1_INDEX;
  
     /* fill Intial UL BWP */
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.bwp.firstPrb = 0;
-    duCfgParam.macCellCfg.cellCfg.initialUlBwp.bwp.numPrb = TOTAL_PRB_20MHZ_MU0; /* configured to total BW */
+    duCfgParam.macCellCfg.cellCfg.initialUlBwp.bwp.numPrb = MAX_NUM_RB; /* configured to total BW */
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.bwp.scs = duCfgParam.macCellCfg.ssbCfg.scsCmn;
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.bwp.cyclicPrefix = NORMAL_CYCLIC_PREFIX;
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.puschCommon.numTimeDomRsrcAlloc = 2;
  
     /* fill PUCCH config common */
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.pucchCommon.pucchResourceCommon = PUCCH_RSRC_COMMON;
-    duCfgParam.macCellCfg.cellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_GROUP_HOPPING;
+    duCfgParam.macCellCfg.cellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_NEITHER_HOPPING;
  
  
  #ifndef O1_ENABLE
@@@ -2960,7 -2962,7 +2960,7 @@@ uint8_t parsePucchConfigCommon(xmlDocPt
           pucchCfgCmn->pucchResourceCommon = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"PUCCH_GROUP_HOPPING")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"PUCCH_NEITHER_HOPPING")) && (cur->ns == ns))
        {
           pucchCfgCmn->pucchGroupHopping = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
@@@ -5280,80 -5282,6 +5280,80 @@@ uint8_t parseMacSliceCfgReq(xmlDocPtr d
     }
     return ROK;
  }
 +#endif
 +
 +#ifdef THREAD_AFFINITY
 +/*******************************************************************
 + *
 + * @brief Set thread affinity to the core configured via XML file
 + *
 + * @details
 + *
 + *    Function : parseThreadAffinity
 + *
 + *    Functionality: Set thread affinity to the core configured 
 + *       via XML file
 + *
 + * @params[in] XML document pointer
 + *             XML namespace
 + *             Current node in XML
 + *             Thread information
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t parseThreadAffinity(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, ThreadInfo *threads)
 +{
 +   cur = cur -> xmlChildrenNode;
 +   while(cur != NULL)
 +   {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"DU_APP_CORE")) && (cur->ns == ns))
 +      {
 +         threads->duAppCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->duAppSTskId, SS_AFFINITY_MODE_EXCL, threads->duAppCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"EGTP_CORE")) && (cur->ns == ns))
 +      {
 +         threads->egtpCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->egtpSTskId, SS_AFFINITY_MODE_EXCL, threads->egtpCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"RLC_MAC_CORE")) && (cur->ns == ns))
 +      {
 +         threads->rlcMacCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->rlcMacSTskId, SS_AFFINITY_MODE_EXCL, threads->rlcMacCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"RLC_UL_CORE")) && (cur->ns == ns))
 +      {
 +         threads->rlcUlCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->rlcUlSTskId, SS_AFFINITY_MODE_EXCL, threads->rlcUlCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"SCH_CORE")) && (cur->ns == ns))
 +      {
 +         threads->schCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->schSTskId, SS_AFFINITY_MODE_EXCL, threads->schCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"SCTP_CORE")) && (cur->ns == ns))
 +      {
 +         threads->sctpCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->sctpSTskId, SS_AFFINITY_MODE_EXCL, threads->sctpCoreId, 0);
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"LOWER_MAC_CORE")) && (cur->ns == ns))
 +      {
 +         threads->lwrMacCoreId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +         ODU_SET_THREAD_AFFINITY(&threads->lwrMacSTskId, SS_AFFINITY_MODE_EXCL, threads->lwrMacCoreId, 0);
 +      }
 +
 +      cur = cur -> next;
 +   }
 +   return ROK;
 +}
 +#endif
  
  /*******************************************************************
   *
@@@ -5382,20 -5310,10 +5382,20 @@@ uint8_t parseDuCfgParams(xmlDocPtr doc
     CmInetIpAddr cuIp;
     CmInetIpAddr ricIp;
  
 -   memset(&duCfgParam, 0, sizeof(struct duCfgParams));
     cur = cur->xmlChildrenNode;
     while(cur != NULL)
     {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"THREAD_AFFINITY")) && (cur->ns == ns))
 +      {
 +#ifdef THREAD_AFFINITY      
 +         if(parseThreadAffinity(doc, ns, cur, &duCfgParam.threadInfo) != ROK)
 +         {
 +            return RFAILED;
 +         }
 +#endif         
 +      }
 +
 +#ifdef XML_BASED_CONFIG
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_DRB")) && (cur->ns == ns))
        {
           duCfgParam.maxNumDrb = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
              return RFAILED;
           }
        }
 +#endif      
  
        cur = cur -> next;
     }
     return ROK;
  }
 -#endif
  
  /*******************************************************************
   *
   * ****************************************************************/
  uint8_t duReadCfg()
  {
 -#ifdef XML_BASED_CONFIG
     const char *filename = "../build/config/odu_config.xml";
     xmlDocPtr doc = NULLP;
     xmlNodePtr cur = NULLP;
     }
  
     cur = xmlDocGetRootElement(doc);
 -   ns = xmlSearchNsByHref(doc, cur, (const xmlChar *)"odu_config.xml");
 +   ns = xmlSearchNsByHref(doc, cur, (const xmlChar *)"urn:o-ran:odu:configuration");
     if(ns == NULL)
     {
        DU_LOG("\nERROR  --> DU_APP: XML Namespace not found.\n");
  
     xmlFreeDoc(doc);
     xmlCleanupParser();
 -#endif
  
     Pst pst;
     Buffer *mBuf;
  
 -   memset(&duCfgParam, 0, sizeof(DuCfgParams));
 -
     /* Read configs into duCfgParams */
     if(readCfg() != ROK)
     {
@@@ -5727,16 -5649,6 +5727,16 @@@ void printDuConfig(
     DU_LOG("\n ** DU CONFIGURATION ** \n");
     DU_LOG("DU ID %d\n", duCfgParam.duId);
     DU_LOG("DU Name %s\n", duCfgParam.duName);
 +
 +   DU_LOG("\n ** Thread Affinity ** \n");
 +   DU_LOG("DU APP CORE ID %d\n", duCfgParam.threadInfo.duAppCoreId);
 +   DU_LOG("EGTP CORE ID %d\n", duCfgParam.threadInfo.egtpCoreId);
 +   DU_LOG("SCTP CORE ID %d\n", duCfgParam.threadInfo.sctpCoreId);
 +   DU_LOG("RLC-UL CORE ID %d\n", duCfgParam.threadInfo.rlcUlCoreId);
 +   DU_LOG("RLC-DL and MAC CORE ID %d\n", duCfgParam.threadInfo.rlcMacCoreId);
 +   DU_LOG("SCH CORE ID %d\n", duCfgParam.threadInfo.schCoreId);
 +   DU_LOG("Lower MAC CORE ID %d\n", duCfgParam.threadInfo.lwrMacCoreId);
 +
     DU_LOG("MAX NUM DRB %d\n", duCfgParam.maxNumDrb);
     DU_LOG("MAX SUPPORTED UE %d\n", duCfgParam.maxSupportedUes);
     DU_LOG("MAX UE %d\n",duCfgParam.maxUe);
diff --combined src/du_app/du_cfg.h
  
  /* Macro define for PUCCH Configuration */
  #define PUCCH_RSRC_COMMON  0
- #define PUCCH_GROUP_HOPPING 0 /* Neither sequence hopping nor group hopping */
+ #define PUCCH_NEITHER_HOPPING 0 /* Neither sequence hopping nor group hopping */
  #define PUCCH_P0_NOMINAL   -74
  
  /* MACRO defines for TDD DL-UL Configuration */
@@@ -1247,24 -1247,6 +1247,24 @@@ typedef struct sib1Param
     SrvCellCfgCommSib     srvCellCfgCommSib;
  }Sib1Params;
  
 +typedef struct threadInfo
 +{
 +   SSTskId duAppSTskId;
 +   uint8_t duAppCoreId;
 +   SSTskId egtpSTskId;
 +   uint8_t egtpCoreId;
 +   SSTskId sctpSTskId;
 +   uint8_t sctpCoreId;
 +   SSTskId rlcUlSTskId;
 +   uint8_t rlcUlCoreId;
 +   SSTskId rlcMacSTskId;
 +   uint8_t rlcMacCoreId;
 +   SSTskId schSTskId;
 +   uint8_t schCoreId;
 +   SSTskId lwrMacSTskId;
 +   uint8_t lwrMacCoreId;
 +}ThreadInfo;
 +
  typedef struct duCfgParams
  {  
     uint32_t           duId;
     uint16_t           maxNumDrb;
     uint16_t           maxSupportedUes;
     uint32_t           maxUe;
 +   ThreadInfo         threadInfo;
     SctpParams         sctpParams;                  /* SCTP Params */
     F1EgtpParams       egtpParams;                  /* EGTP Params */
     SchedulerCfg       schedCfg;