ODUHIGH-199:Addressing mux review comments
[o-du/l2.git] / src / 5gnrmac / mac_mux.c
index 266a572..ddc2476 100644 (file)
 ################################################################################
  *******************************************************************************/
 
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
 
 /* header include files -- defines (.h) */
-#include "envopt.h"        /* environment options */
-#include "envdep.h"        /* environment dependent */
-#include "envind.h"        /* environment independent */
-#include "gen.h"           /* general layer */
-#include "ssi.h"           /* system service interface */
-#include "cm_hash.h"       /* common hash list */
-#include "cm_mblk.h"       /* common memory link list library */
-#include "cm_llist.h"      /* common linked list library */
-#include "cm_err.h"        /* common error */
-#include "cm_lte.h"        /* common LTE */
+#include "common_def.h"
 #include "lrg.h"           /* Layer manager interface includes*/
 #include "crg.h"           /* CRG interface includes*/
 #include "rgu.h"           /* RGU interface includes*/
 #include "du_log.h"
 
 /* header/extern include files (.x) */
-#include "gen.x"           /* general layer typedefs */
-#include "ssi.x"           /* system services typedefs */
-#include "cm5.x"           /* common timers */
-#include "cm_hash.x"       /* common hash list */
-#include "cm_lib.x"        /* common library */
-#include "cm_llist.x"      /* common linked list */
-#include "cm_mblk.x"       /* memory management */
-#include "cm_tkns.x"       /* common tokens */
-#include "cm_lte.x"       /* common tokens */
 #include "rgu.x"           /* RGU types */
 #include "tfu.x"           /* RGU types */
 #include "lrg.x"           /* layer management typedefs for MAC */
@@ -239,20 +218,24 @@ void createMacRaCb(uint16_t cellId, uint16_t crnti)
  * @details
  *
  * Function : fillMsg4DlData
- *      This function is a stub which sends Dl Data
+ *      This function sends Dl Data
  *      to form MAC SDUs
  *           
  * @param[in]  MacDlData *dlData
+ *             msg4Pdu pointer
  ************************************************/
 
-void fillMsg4DlData(MacDlData *dlData)
+void fillMsg4DlData(MacDlData *dlData, uint8_t *msg4Pdu)
 {
    uint8_t idx = 0;
+   uint16_t idx2;
    dlData->numPdu = 1;
    dlData->pduInfo[idx].lcId = MAC_LCID_CCCH;
-   dlData->pduInfo[idx].pduLen = macCb.macCell->macRaCb[0].msg4PduLen;
-   memcpy(dlData->pduInfo[idx].dlPdu, macCb.macCell->macRaCb[0].msg4Pdu,\
-    macCb.macCell->macRaCb[0].msg4PduLen);
+   dlData->pduInfo[idx].pduLen = macCb.macCell->macRaCb[idx].msg4PduLen;
+   for(idx2 = 0; idx2 <  dlData->pduInfo[idx].pduLen; idx2++)
+       {
+      dlData->pduInfo[idx].dlPdu[idx2] = msg4Pdu[idx2];
+       }
 }
 
 /*************************************************
@@ -264,17 +247,18 @@ void fillMsg4DlData(MacDlData *dlData)
  *      This function fills Mac ce identities
  *           
  * @param[in]  RlcMacData *dlData
+ *             Msg3Pdu Data
  ************************************************/
 
-void fillMacCe(MacCeInfo *macCeInfo)
+void fillMacCe(MacCeInfo *macCeInfo, uint8_t *msg3Pdu)
 {
    uint8_t idx;
    macCeInfo->numCes = 1;
    for(idx = 0; idx < macCeInfo->numCes; idx++)
    {
       macCeInfo->macCe[idx].macCeLcid = MAC_LCID_CRI;
-      memcpy(&macCeInfo->macCe[idx].macCeValue, \
-         &macCb.macCell->macRaCb[idx].msg3Pdu, MAX_CRI_SIZE);
+      memcpy(macCeInfo->macCe[idx].macCeValue, \
+         msg3Pdu, MAX_CRI_SIZE);
    }
 }
 
@@ -284,17 +268,16 @@ void fillMacCe(MacCeInfo *macCeInfo)
  *
  * @details
  *
- *    Function : buildMacPdu
+ *    Function : macMuxPdu
  *
  *    Functionality:
  *     The MAC PDU will be MUXed and formed
  *
- * @params[in] MacDlData *, MacCeInfo *, tbSize
+ * @params[in] MacDlData *, MacCeInfo *, msg4TxPdu *, tbSize
  * @return void
- *
  * ****************************************************************/
 
-void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
+void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint8_t *msg4TxPdu, uint16_t tbSize)
 {
    uint8_t bytePos = 0;
    uint8_t bitPos = 7;
@@ -306,14 +289,13 @@ void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
    uint8_t RBit = 0;              /* Reserved bit */
    uint8_t FBit;                  /* Format Indicator */
    uint8_t lcid;                  /* LCID */
-   uint8_t lenField = 0;          /* Length field */
+   uint16_t lenField = 0;         /* Length field */
 
    /* subheader field size (in bits) */
    uint8_t RBitSize = 1;
    uint8_t FBitSize = 1;
    uint8_t lcidSize = 6;
-   uint8_t lenFieldSize = 0;          /* 8-bit or 16-bit L field  */
-   uint8_t criSize = 8;
+   uint8_t lenFieldSize = 0;      /* 8-bit or 16-bit L field  */
 
    /* PACK ALL MAC CE */
    for(idx = 0; idx < macCeData->numCes; idx++)
@@ -324,11 +306,11 @@ void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
          case MAC_LCID_CRI:
         {
             /* Packing fields into MAC PDU R/R/LCID */
-            packBytes(macPdu, &bytePos, &bitPos, RBit, RBitSize);
-            packBytes(macPdu, &bytePos, &bitPos, RBit, RBitSize);
+            packBytes(macPdu, &bytePos, &bitPos, RBit, (RBitSize * 2));
             packBytes(macPdu, &bytePos, &bitPos, lcid, lcidSize);
             memcpy(&macPdu[bytePos], macCeData->macCe[idx].macCeValue,\
             MAX_CRI_SIZE);
+                               bytePos += MAX_CRI_SIZE;
             break;
          }
          default:
@@ -341,11 +323,11 @@ void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
    for(idx = 0; idx < dlData->numPdu; idx++)
    {
       lcid = dlData->pduInfo[idx].lcId;
-      lenField = dlData->pduInfo[idx].pduLen;
       switch(lcid)
       {
          case MAC_LCID_CCCH:
         {
+            lenField = dlData->pduInfo[idx].pduLen;
             if(dlData->pduInfo[idx].pduLen > 255)
             {
                FBit = 1;
@@ -362,7 +344,8 @@ void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
             packBytes(macPdu, &bytePos, &bitPos, FBit, FBitSize);
             packBytes(macPdu, &bytePos, &bitPos, lcid, lcidSize);
             packBytes(macPdu, &bytePos, &bitPos, lenField, lenFieldSize);
-            memcpy(&macPdu[bytePos], dlData->pduInfo[idx].dlPdu, lenField);
+                               memcpy(&macPdu[bytePos], dlData->pduInfo[idx].dlPdu, lenField);
+                               bytePos += lenField;
             break;
         }
 
@@ -381,11 +364,10 @@ void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint16_t tbSize)
       packBytes(macPdu, &bytePos, &bitPos, lcid, lcidSize);
    }
 
-   MAC_ALLOC(macCb.macCell->macRaCb[0].msg4TxPdu, macCb.macCell->macRaCb[0].msg4TbSize);
-   if(macCb.macCell->macRaCb[0].msg4TxPdu != NULLP)
+       /*Storing the muxed pdu in macRaCb */
+   if(msg4TxPdu != NULLP)
    {
-      memcpy(macCb.macCell->macRaCb[0].msg4TxPdu, macPdu,\
-         macCb.macCell->macRaCb[0].msg4TbSize);
+          memcpy(msg4TxPdu, macPdu, tbSize);
    }
 }