Changes to make number of slots and BW generic
[o-du/l2.git] / src / cm / du_app_mac_inf.h
index ccc3206..acc2f64 100644 (file)
 #   See the License for the specific language governing permissions and        #
 #   limitations under the License.                                             #
 ################################################################################
-*******************************************************************************/
+ *******************************************************************************/
 
 /* Defines APIs exchanged between du_app and cl module of MAC */
 #ifndef __MACINT_H__
 #define __MACINT_H__
 
-#include <stdbool.h>
-
 #define NUM_NUMEROLOGY 5  /* Number of numerology */
 #define MAXIMUM_TDD_PERIODICITY 5
 #define MAX_SYMB_PER_SLOT 14 
 #define SS_MONITORING_SYMBOL     0x2000; /* symbol-0, set 14th bit */
 #define SIB1_MCS  4
 
-#define SRB_ID_0 0
-#define SRB_ID_1 1
 /* Macro for Ue Context */
-#define MAX_NUM_LOGICAL_CHANNELS 11
 #define MAX_NUM_SR_CFG_PER_CELL_GRP 8   /* Max number of scheduling request config per cell group */
 #define MAC_NUM_TAGS 4                  /* Max number of timing advance groups */
 #define MAX_NUM_BWP  4                  /* Max number of BWP per serving cell */
 #define MAX_NUM_CRSET  3                /* Max number of control resource set in add/modify/release list */
 #define MAX_NUM_SEARCH_SPC  10          /* Max number of search space in add/modify/release list */
-#define FREQ_DOM_RSRC_SIZE  6           /* i.e. 6 bytes because Size of frequency domain resource is 45 bits */
 #define MONITORING_SYMB_WITHIN_SLOT_SIZE 2  /* i.e. 2 bytes because size of monitoring symbols within slot is 14 bits */
 #define MAX_NUM_DL_ALLOC 16             /* Max number of pdsch time domain downlink allocation */
 #define MAX_NUM_UL_ALLOC 16             /* Max number of pusch time domain uplink allocation */
 #define SD_SIZE   3                     /* Max size of Slice Differentiator in S-NSSAI */
-#define PDSCH_START_SYMBOL_LEN 53
-#define PUSCH_START_SYMBOL_LEN 41
 
-/* Macros for coupling */
-#define DU_MAC_LC  0
-#define DU_MAC_TC  1
-#define DU_MAC_LWLC  2
+#define MAX_NUM_SRB    8
+#define MAX_NUM_DRB    64
+#define MAX_NUM_SCELL  32
 
 /* Event IDs */
 #define EVENT_MAC_CELL_CONFIG_REQ    200
 #define EVENT_MAC_UL_CCCH_IND        206
 #define EVENT_MAC_DL_CCCH_IND        207
 #define EVENT_MAC_UE_CREATE_REQ      208
+#define EVENT_MAC_UE_CREATE_RSP      209
+#define EVENT_MAC_UE_RECONFIG_REQ    210
+#define EVENT_MAC_UE_RECONFIG_RSP    211
+
+#define BSR_PERIODIC_TIMER_SF_10 10
+#define BSR_RETX_TIMER_SF_320 320
+#define BSR_SR_DELAY_TMR_2560 2560
+
+typedef enum
+{
+   MAC_DU_APP_RSP_NOK,
+   MAC_DU_APP_RSP_OK
+}MacRsp;
 
 typedef enum
 {
@@ -254,8 +258,8 @@ typedef enum
 typedef enum
 {
    PDSCH_X_OVERHEAD_6,
-       PDSCH_X_OVERHEAD_12,
-       PDSCH_X_OVERHEAD_18
+   PDSCH_X_OVERHEAD_12,
+   PDSCH_X_OVERHEAD_18
 }PdschXOverhead;
 
 typedef enum
@@ -266,13 +270,13 @@ typedef enum
 
 typedef enum 
 {
-   CCE_REG_MAPPINGTYPE_PR_INTERLEAVED,
+   CCE_REG_MAPPINGTYPE_PR_INTERLEAVED = 1,
    CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED
 }REGMappingType;
 
 typedef enum
 {
-   SLOTPERIODICITYANDOFFSET_PR_SL1,
+   SLOTPERIODICITYANDOFFSET_PR_SL1 = 1,
    SLOTPERIODICITYANDOFFSET_PR_SL2,
    SLOTPERIODICITYANDOFFSET_PR_SL4,
    SLOTPERIODICITYANDOFFSET_PR_SL5,
@@ -291,16 +295,22 @@ typedef enum
 
 typedef enum
 {
-  SAMEASREG_BUNDLE,
-  ALL_CONTIGUOUS_RBS
+   SAMEASREG_BUNDLE,
+   ALL_CONTIGUOUS_RBS
 }PrecoderGranul;
 
 typedef enum
 {
-   SEARCHSPACETYPE_PR_COMMON,
+   SEARCHSPACETYPE_PR_COMMON = 1,
    SEARCHSPACETYPE_PR_UE_SPECIFIC
 }SearchSpaceType;
 
+typedef enum
+{
+   QOS_NON_DYNAMIC = 1,
+   QOS_DYNAMIC
+}QosType;
+
 typedef enum
 {
    AGGREGATIONLEVEL_N0 = 0,  
@@ -347,25 +357,156 @@ typedef enum
 
 typedef enum
 {
-   TYPE_STATIC_BUNDLING,
+   TYPE_STATIC_BUNDLING = 1,
    TYPE_DYNAMIC_BUNDLING
 }BundlingType;
 
 typedef enum
 {
-  LC_PRIORITY_1 = 1,
-  LC_PRIORITY_2,
-  LC_PRIORITY_3
+   SET2_SIZE_N4,
+   SET2_SIZE_WIDEBAND
+}BundlingSizeSet2;
+
+typedef enum
+{
+   SET1_SIZE_N4,
+   SET1_SIZE_WIDEBAND,
+   SET1_SIZE_N2_WIDEBAND,
+   SET1_SIZE_N4_WIDEBAND
+}BundlingSizeSet1;
+
+typedef enum
+{
+   LC_PRIORITY_1 = 1,
+   LC_PRIORITY_2,
+   LC_PRIORITY_3
 }LcPriority;
 
+typedef enum
+{
+  PBR_KBPS_0,
+  PBR_KBPS_8,
+  PBR_KBPS_16,
+  PBR_KBPS_32,
+  PBR_KBPS_64,
+  PBR_KBPS_128,
+  PBR_KBPS_256,
+  PBR_KBPS_512,
+  PBR_KBPS_1024,
+  PBR_KBPS_2048,
+  PBR_KBPS_4096,
+  PBR_KBPS_8192,
+  PBR_KBPS_16384,
+  PBR_KBPS_32768,
+  PBR_KBPS_65536,
+  PBR_KBPS_INFINITY
+}PBitRate;
+
+typedef enum
+{
+   BSD_MS_5,
+   BSD_MS_10,
+   BSD_MS_20,
+   BSD_MS_50,
+   BSD_MS_100,
+   BSD_MS_150,
+   BSD_MS_300,
+   BSD_MS_500,
+   BSD_MS_1000,
+   BSD_SPARE_7,
+   BSD_SPARE_6,
+   BSD_SPARE_5,
+   BSD_SPARE_4,
+   BSD_SPARE_3,
+   BSD_SPARE_2,
+   BSD_SPARE_1
+
+}BucketSizeDur;
+
+typedef enum
+{
+   RADIO_NW_LAYER_FAIL,
+   TRANSPORT_LAYER_FAIL,
+   PROTOCOL_FAIL,
+   MISCELLANEOUS
+}CauseGrp;
+
+typedef enum
+{
+   UNSPECIFIED_RADIO_NW_CAUSE,
+   RL_FAIL_RLC,
+   UNKNOWN_GNB_CU_UE_F1AP_ID,
+   ALREADY_ALLOCATED_GNB_CU_UE_F1AP_ID,
+   UNKNOWN_GNB_DU_UE_F1AP_ID,
+   ALREADY_ALLOCATED_GNB_DU_UE_F1AP_ID,
+   UNKNOWN_UE_F1AP_ID_PAIR,
+   INCONSISTENT_UE_F1AP_ID_PAIR,
+   INTERACTION_WITH_OTHER_PROCEDURE,
+   UNSUPPORTED_QCI,
+   ACTION_REQUIRED_FOR_RADIO_REASONS,
+   RADIO_RESOURCES_UNAVAILABLE,
+   CANCELLED_PROCEDURE,
+   RELEASE_NORMAL,
+   CELL_UNAVAILABLE,
+   OTHER_RL_FAILURE,
+   UE_REJECTION,
+   RESOURCES_UNAVAILABLE_FOR_SLICE
+}RadioNwLyrCause;
+
+typedef enum
+{
+   UNSPECIFIED_TRANSPORT_LAYER_CAUSE,
+   TRANSPORT_RESOURCE_UNAVAILABLE
+}TransLyrCause;
+
+typedef enum
+{
+   TRANSFER_SYNTAX_ERROR,
+   ABSTRACT_SYNTAX_ERROR_REJECT,
+   ABSTRACT_SYNTAX_ERROR_IGNORE_AND_REJECT,
+   INCOMPATIBLE_MESSAGE_FOR_RECEIVER_STATE,
+   SEMANTIC_ERR,
+   ABSTRAXCT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MSG,
+   UNSPECIFIED_PROTOCOL_CAUSE
+}ProtCause;
+
+typedef enum
+{
+   CONTROL_PROCESSING_OVERLOAD,
+   NOT_ENOUGH_USER,
+   PLANE_PROCESSING_RESOURCES,
+   HARDWARE_FAIL,
+   INTERVENTION_BY_O_AND_M,
+   UNSPECIFIED_MISC_CAUSE
+}MiscFailCause;
+
+typedef enum
+{
+   MCS_TABLE_QAM64,
+   MCS_TABLE_QAM256,
+   MCS_TABLE_QAM64_LOW_SE
+}McsTable;
+
+typedef struct failureCause
+{
+   CauseGrp   type;
+   union
+   {
+      RadioNwLyrCause   radioNwCause;
+      TransLyrCause     transportCause;
+      ProtCause         protcolCause;
+      MiscFailCause     miscCause;
+   }u;
+}FailureCause;
+
 typedef struct carrierCfg
 {
-   Bool  pres;
-   U16   bw;             /* DL/UL bandwidth */
-   U32   freq;           /* Absolute frequency of DL/UL point A in KHz */
-   U16   k0[NUM_NUMEROLOGY];          /* K0 for DL/UL */
-   U16   gridSize[NUM_NUMEROLOGY];    /* DL/UL Grid size for each numerologies */
-   U16   numAnt;         /* Number of Tx/Rx antennas */
+   bool  pres;
+   uint32_t   bw;             /* DL/UL bandwidth */
+   uint32_t   freq;           /* Absolute frequency of DL/UL point A in KHz */
+   uint16_t   k0[NUM_NUMEROLOGY];          /* K0 for DL/UL */
+   uint16_t   gridSize[NUM_NUMEROLOGY];    /* DL/UL Grid size for each numerologies */
+   uint16_t   numAnt;         /* Number of Tx/Rx antennas */
 }CarrierCfg;
 
 typedef struct ssbCfg
@@ -380,42 +521,42 @@ typedef struct ssbCfg
    uint8_t     mibPdu[3];           /* MIB payload */
    uint32_t    ssbMask[SSB_MASK_SIZE];      /* Bitmap for actually transmitted SSB. */
    uint8_t     beamId[NUM_SSB];
-   Bool        multCarrBand;     /* Multiple carriers in a band */
-   Bool        multCellCarr;     /* Multiple cells in single carrier */
+   bool        multCarrBand;     /* Multiple carriers in a band */
+   bool        multCellCarr;     /* Multiple cells in single carrier */
 }SsbCfg;
 
 typedef struct fdmInfo
 {
-   U16   rootSeqIdx;        /* Root sequence index */
-   U8    numRootSeq;        /* Number of root sequences required for FD */
-   U16   k1;                /* Frequency Offset for each FD */
-   U8    zeroCorrZoneCfg;   /* Zero correlation zone cofig */
-   U8    numUnusedRootSeq;  /* Number of unused root sequence */
-   U8    *unsuedRootSeq;     /* Unused root sequence per FD */
+   uint16_t   rootSeqIdx;        /* Root sequence index */
+   uint8_t    numRootSeq;        /* Number of root sequences required for FD */
+   uint16_t   k1;                /* Frequency Offset for each FD */
+   uint8_t    zeroCorrZoneCfg;   /* Zero correlation zone cofig */
+   uint8_t    numUnusedRootSeq;  /* Number of unused root sequence */
+   uint8_t    *unsuedRootSeq;     /* Unused root sequence per FD */
 }PrachFdmInfo;
 
 typedef struct prachCfg
 {
-   Bool          pres;
-       uint8_t       prachCfgIdx;         /* PRACH Cfg Index */
+   bool          pres;
+   uint8_t       prachCfgIdx;         /* PRACH Cfg Index */
    PrachSeqLen   prachSeqLen;         /* RACH Sequence length: Long/short */
    uint8_t       prachSubcSpacing;    /* Subcarrier spacing of RACH */
    RstSetCfg     prachRstSetCfg;      /* PRACH restricted set config */
-       uint16_t      msg1FreqStart;       /* Msg1-FrequencyStart */
+   uint16_t      msg1FreqStart;       /* Msg1-FrequencyStart */
    uint8_t       msg1Fdm;             /* PRACH FDM (1,2,4,8) */
-       uint8_t       rootSeqLen;          /* Root sequence length */
+   uint8_t       rootSeqLen;          /* Root sequence length */
    PrachFdmInfo  fdm[8];              /* FDM info */
    uint8_t       ssbPerRach;          /* SSB per RACH occassion */
-   Bool          prachMultCarrBand;   /* Multiple carriers in Band */
+   bool          prachMultCarrBand;   /* Multiple carriers in Band */
    uint8_t       prachRestrictedSet; /* Support for PRACH restricted set */
-       uint8_t       raContResTmr;        /* RA Contention Resoultion Timer */
-       uint8_t       rsrpThreshSsb;       /* RSRP Threshold SSB */
+   uint8_t       raContResTmr;        /* RA Contention Resoultion Timer */
+   uint8_t       rsrpThreshSsb;       /* RSRP Threshold SSB */
    uint8_t       raRspWindow;         /* RA Response Window */
 }PrachCfg;
 
 typedef struct tddCfg
 {
-   Bool               pres;
+   bool               pres;
    DlUlTxPeriodicity  tddPeriod;      /* DL UL Transmission periodicity */
    SlotConfig         slotCfg[MAXIMUM_TDD_PERIODICITY][MAX_SYMB_PER_SLOT]; 
 }TDDCfg;
@@ -435,8 +576,8 @@ typedef struct bwpParams
 {
    uint16_t firstPrb;
    uint16_t numPrb;
-       uint8_t  scs;
-       uint8_t  cyclicPrefix;
+   uint8_t  scs;
+   uint8_t  cyclicPrefix;
 }BwpParams;
 
 typedef struct candidatesInfo
@@ -451,11 +592,11 @@ typedef struct candidatesInfo
 typedef struct searchSpaceCfg
 {
    uint8_t searchSpaceId;
-       uint8_t coresetId;
-       uint16_t monitoringSlot;
-       uint16_t duration;
-       uint16_t monitoringSymbol;
-       CandidatesInfo candidate;
+   uint8_t coresetId;
+   uint16_t monitoringSlot;
+   uint16_t duration;
+   uint16_t monitoringSymbol;
+   CandidatesInfo candidate;
 }SearchSpaceCfg;
 
 typedef struct pdcchConfigCommon
@@ -468,75 +609,67 @@ typedef struct pdcchConfigCommon
 typedef struct pdschConfigCommon
 {
    uint8_t k0;
-       uint8_t mappingType;
-       uint8_t startSymbol;
-       uint8_t lengthSymbol;
+   uint8_t mappingType;
+   uint8_t startSymbol;
+   uint8_t lengthSymbol;
 }PdschConfigCommon;
 
 typedef struct pucchConfigCommon
 {
    uint8_t pucchResourceCommon;
-       uint8_t pucchGroupHopping;
+   uint8_t pucchGroupHopping;
 }PucchConfigCommon;
 
 typedef struct puschConfigCommon
 {
    /* PUSCH-TimeDomainResourceAllocation info */
    uint8_t k2;
-       uint8_t mappingType;
-       uint8_t startSymbol;
-       uint8_t lengthSymbol;
+   uint8_t mappingType;
+   uint8_t startSymbol;
+   uint8_t lengthSymbol;
 }PuschConfigCommon;
 
 typedef struct bwpDlConfig
 {
    BwpParams      bwp;
-       PdcchConfigCommon pdcchCommon;
-       PdschConfigCommon pdschCommon;
+   PdcchConfigCommon pdcchCommon;
+   PdschConfigCommon pdschCommon;
 }BwpDlConfig;
 
 typedef struct bwpUlConfig
 {
    BwpParams      bwp;
-       // rach config common sent in PrachCfg
-       PucchConfigCommon pucchCommon;
-       PuschConfigCommon puschCommon;
+   // rach config common sent in PrachCfg
+   PucchConfigCommon pucchCommon;
+   PuschConfigCommon puschCommon;
 }BwpUlConfig;
 
 typedef struct macCellCfg
 {
-       U16            transId;          /* Trans Id */
-       U16            cellId;           /* Cell Id */
-       U8             numTlv;           /* Number of configuration TLVs */
-       U8             carrierId;        /* Carrired Index */
-       U16            phyCellId;        /* Physical cell id */
-       DuplexMode     dupType;          /* Duplex type: TDD/FDD */
-       CarrierCfg     dlCarrCfg;        /* DL Carrier configuration */
-       CarrierCfg     ulCarrCfg;        /* UL Carrier configuration */
-       Bool           freqShft;         /* Indicates presence of 7.5kHz frequency shift */
+   uint16_t       cellId;           /* Cell Id */
+   uint8_t        carrierId;        /* Carrired Index */
+   uint16_t       phyCellId;        /* Physical cell id */
+   uint8_t        numerology;       /* Supported numerology */
+   DuplexMode     dupType;          /* Duplex type: TDD/FDD */
+   CarrierCfg     dlCarrCfg;        /* DL Carrier configuration */
+   CarrierCfg     ulCarrCfg;        /* UL Carrier configuration */
+   bool           freqShft;         /* Indicates presence of 7.5kHz frequency shift */
    SsbCfg         ssbCfg;           /* SSB configuration */          
    PrachCfg       prachCfg;         /* PRACH Configuration */
    TDDCfg         tddCfg;           /* TDD periodicity and slot configuration */
    RSSIMeasUnit   rssiUnit;         /* RSSI measurement unit */
    Sib1CellCfg    sib1Cfg;          /* SIB1 config */
-       BwpDlConfig    initialDlBwp;     /* Initial DL BWP */
-       BwpUlConfig    initialUlBwp;     /* Initial UL BWP */
-       uint8_t        dmrsTypeAPos;     /* DMRS Type A position */
+   BwpDlConfig    initialDlBwp;     /* Initial DL BWP */
+   BwpUlConfig    initialUlBwp;     /* Initial UL BWP */
+   uint8_t        dmrsTypeAPos;     /* DMRS Type A position */
 }MacCellCfg;
 
 typedef struct macCellCfgCfm
 {
-       uint8_t        rsp; 
-   U16            transId;
+   uint16_t            cellId;
+   uint8_t        rsp; 
 }MacCellCfgCfm;
 
-typedef struct slotInfo
-{
-   uint16_t cellId;
-   uint16_t sfn;
-   uint16_t slot;
-}SlotInfo;
-
 typedef struct macCellStartInfo
 {
    uint16_t cellId;
@@ -551,6 +684,7 @@ typedef struct ulCcchInd
 {
    uint16_t cellId;
    uint16_t crnti;
+   uint16_t ulCcchMsgLen;
    uint8_t  *ulCcchMsg;
 }UlCcchIndInfo;
 
@@ -563,12 +697,12 @@ typedef struct dlCcchInd
    uint8_t       *dlCcchMsg;
 }DlCcchIndInfo;
 
-typedef struct bsrCfg
+typedef struct bsrTmrCfg
 {
-   uint8_t periodicTimer;
-   uint8_t retxTimer;
-   uint8_t srDelayTimer;
-}BsrCfg;
+   uint16_t     periodicTimer;
+   uint16_t     retxTimer;
+   uint16_t     srDelayTimer;
+}BsrTmrCfg;
 
 
 /* Info of Scheduling Request to Add/Modify */
@@ -616,10 +750,10 @@ typedef struct phrCfg
 typedef struct macCellGrpCfg
 {
    SchedReqCfg schReqCfg;
-   TagCfg tagCfg;
-   //BsrCfg bsrCfg;
-   bool   phrCfgSetupPres;   /* true/false: phrCfgSetup/phrCfgRelease */
-   PhrCfg phrCfg;
+   TagCfg      tagCfg;
+   BsrTmrCfg   bsrTmrCfg;
+   bool        phrCfgSetupPres;   /* true/false: phrCfgSetup/phrCfgRelease */
+   PhrCfg      phrCfg;
 }MacCellGrpCfg;
 
 typedef struct phyCellGrpCfg
@@ -672,9 +806,25 @@ typedef struct pdcchConfig
 typedef struct pdschTimeDomRsrcAlloc
 {
    CommonMappingType mappingType;
+   uint8_t           startSymbol;
+   uint8_t           symbolLength;
    uint8_t           startSymbolAndLength;
 }PdschTimeDomRsrcAlloc;
 
+
+typedef struct pdschBundling
+{
+   struct staticBundling
+   {
+     BundlingSizeSet2 size;
+   }StaticBundling;
+   struct dynamicBundling
+   {
+     BundlingSizeSet1 sizeSet1;
+     BundlingSizeSet2 sizeSet2;
+   }DynamicBundling;
+}PdschBundling;
+
 /* DMRS downlink configuration */
 typedef struct dmrsDlCfg
 {
@@ -691,6 +841,7 @@ typedef struct pdschConfig
    RBGSize                 rbgSize;
    CodeWordsSchedDci       numCodeWordsSchByDci;                    /* Number of code words scheduled by DCI */
    BundlingType            bundlingType;
+   PdschBundling           bundlingInfo;
 }PdschConfig;
 
 /* Initial Downlink BWP */
@@ -726,7 +877,7 @@ typedef struct pdschServCellCfg
 /* PUCCH Configuration */
 typedef struct pucchCfg
 {
-  /* TODO : Not used currently */ 
+   /* TODO : Not used currently */ 
 }PucchCfg;
 
 /* Transform precoding disabled */
@@ -747,12 +898,15 @@ typedef struct puschTimeDomRsrcAlloc
 {
    uint8_t   k2;
    CommonMappingType   mappingType;
+   uint8_t           startSymbol;
+   uint8_t           symbolLength;
    uint8_t   startSymbolAndLength;
 }PuschTimeDomRsrcAlloc;
 
 /* PUSCH Configuration */
 typedef struct puschCfg
 {
+   uint8_t                 dataScramblingId;
    DmrsUlCfg               dmrsUlCfgForPuschMapTypeA;
    ResAllocType            resourceAllocType;
    uint8_t                 numTimeDomRsrcAlloc;
@@ -798,11 +952,11 @@ typedef struct spCellCfg
    ServCellCfgInfo   servCellCfg;
 }SpCellCfg;
 
-typedef struct maxAggrBitRate
+typedef struct ambrCfg
 {
-   uint32_t ulBits;
-   uint32_t dlBits;
-}MaxAggrBitRate;
+   uint32_t ulBr;   /* UL Bit rate */
+   uint32_t dlBr;   /* DL Bit rate */
+}AmbrCfg;
 
 /* Single Network Slice Selection assistance Info */
 typedef struct snssai
@@ -833,22 +987,22 @@ typedef struct dynFiveQi
 
 typedef struct ngRanAllocAndRetPri
 {
-  uint8_t priorityLevel;
-  uint8_t preEmptionCap;
-  uint8_t preEmptionVul;
+   uint8_t priorityLevel;
+   uint8_t preEmptionCap;
+   uint8_t preEmptionVul;
 }NgRanAllocAndRetPri;
 
 typedef struct grbQosInfo
 {
-  uint32_t maxFlowBitRateDl;
-  uint32_t maxFlowBitRateUl;
-  uint32_t guarFlowBitRateDl;
-  uint32_t guarFlowBitRateUl;
+   uint32_t maxFlowBitRateDl;
+   uint32_t maxFlowBitRateUl;
+   uint32_t guarFlowBitRateDl;
+   uint32_t guarFlowBitRateUl;
 }GrbQosInfo;
 
 typedef struct drbQos
 {
-   uint8_t  fiveQiType;   /* Dynamic or non-dynamic */ 
+   QosType  fiveQiType;   /* Dynamic or non-dynamic */ 
    union
    {
       NonDynFiveQi   nonDyn5Qi;
@@ -865,8 +1019,8 @@ typedef struct ulLcCfg
    uint8_t priority;
    uint8_t lcGroup;
    uint8_t schReqId;
-   uint8_t pbr;        // prioritisedBitRate
-   uint8_t bsd;        // bucketSizeDuration
+   PBitRate pbr;        // prioritisedBitRate
+   BucketSizeDur bsd;        // bucketSizeDuration
 }UlLcCfg;
 
 typedef struct duLcCfg
@@ -876,108 +1030,174 @@ typedef struct duLcCfg
 
 typedef struct lcCfg
 {
+   ConfigType configType;
    uint8_t lcId;
    DrbQosInfo *drbQos; 
    Snssai  *snssai;
-   UlLcCfg *ulLcCfg;
+   bool ulLcCfgPres;
+   UlLcCfg ulLcCfg;
    DlLcCfg dlLcCfg;
-
 }LcCfg;
 
+typedef struct modulationInfo
+{
+   uint8_t     modOrder;    /* Modulation order */
+   uint8_t     mcsIndex;    /* MCS Index */
+   McsTable    mcsTable;    /* MCS table */
+}ModulationInfo;
+
 typedef struct macUeCfg
 {
-   uint16_t cellIdx;
+   uint16_t cellId;
    uint8_t  ueIdx;
    uint16_t crnti;
    MacCellGrpCfg macCellGrpCfg;
    PhyCellGrpCfg phyCellGrpCfg;
    SpCellCfg spCellCfg;
-   MaxAggrBitRate *maxAggrBitRate;
+   AmbrCfg   *ambrCfg;
+   ModulationInfo dlModInfo;    /* DL modulation info */
+   ModulationInfo ulModInfo;    /* UL modulation info */
    uint8_t numLcs;
-   LcCfg lcCfgList[MAX_NUM_LOGICAL_CHANNELS];
+   LcCfg lcCfgList[MAX_NUM_LC];
+   UeCfgState macUeCfgState;    /* InActive / Completed */
 }MacUeCfg;
 
+typedef struct nrcgi
+{
+   Plmn      plmn;
+   uint16_t  cellId;
+}Nrcgi;
+
+typedef struct srbFailInfo
+{
+   uint8_t       srbId;
+   FailureCause  cause;
+}SRBFailInfo;
+
+typedef struct drbFailInfo
+{
+   uint8_t       drbId;
+   FailureCause  cause;
+}DRBFailInfo;
+
+typedef struct sCellFailInfo
+{
+   Nrcgi         nrcgi;
+   FailureCause  cause;
+}SCellFailInfo;
+
+typedef struct ueCfgRsp
+{
+   uint16_t       cellId;
+   uint16_t       ueIdx;
+   MacRsp         result;
+   uint8_t        numSRBFailed;   /* valid values : 0 to MAX_NUM_SRB */ 
+   SRBFailInfo    *failedSRBlisti;
+   uint8_t        numDRBFailed;   /* valid values : 0 to MAX_NUM_DRB */
+   DRBFailInfo    *failedDRBlist;
+   uint8_t        numSCellFailed; /* valid values : 0 to MAX_NUM_SCELL */
+   SCellFailInfo  *failedSCellList;
+}MacUeCfgRsp;
+
 /* Functions for slot Ind from MAC to DU APP*/
-typedef uint16_t (*DuMacSlotInd) ARGS((
-   Pst       *pst,
-   SlotInfo  *slotInfo ));
+typedef uint8_t (*DuMacSlotInd) ARGS((
+        Pst       *pst,
+        SlotIndInfo  *slotInfo ));
 
 /* Functions for stop Ind from MAC to DU APP*/
-typedef uint16_t (*DuMacStopInd) ARGS((
-   Pst       *pst,
-   MacCellStopInfo  *cellId ));
+typedef uint8_t (*DuMacStopInd) ARGS((
+        Pst       *pst,
+        MacCellStopInfo  *cellId ));
 
 /* Functions for mac cell start req */
-typedef uint16_t (*DuMacCellStartReq) ARGS((
-   Pst               *pst, 
-   MacCellStartInfo  *cellStartInfo ));
+typedef uint8_t (*DuMacCellStartReq) ARGS((
+        Pst               *pst, 
+        MacCellStartInfo  *cellStartInfo ));
 
 /* Functions for mac cell stop request */
-typedef uint16_t (*DuMacCellStopReq) ARGS((
-   Pst               *pst,
-   MacCellStopInfo  *cellStopInfo ));
+typedef uint8_t (*DuMacCellStopReq) ARGS((
+        Pst               *pst,
+        MacCellStopInfo  *cellStopInfo ));
+
 /* Function pointers for packing macCellCfg Request and Confirm */
-typedef int (*packMacCellCfgReq) ARGS((
-   Pst           *pst,
-   MacCellCfg    *macCellCfg ));
+typedef uint8_t (*packMacCellCfgReq) ARGS((
+        Pst           *pst,
+        MacCellCfg    *macCellCfg ));
 
-typedef int (*packMacCellCfgConfirm) ARGS((
-   Pst              *pst,
-   MacCellCfgCfm    *macCellCfgCfm ));
+typedef uint8_t (*packMacCellCfgConfirm) ARGS((
+        Pst              *pst,
+        MacCellCfgCfm    *macCellCfgCfm ));
 
-typedef int (*DuMacCellCfgReq) ARGS((
-   Pst        *pst,        
-   MacCellCfg *macCellCfg));
+typedef uint8_t (*DuMacCellCfgReq) ARGS((
+        Pst        *pst,        
+        MacCellCfg *macCellCfg));
 
-typedef int (*DuMacCellCfgCfm) ARGS((
-   Pst        *pst,        
-   MacCellCfgCfm *macCellCfgCfm ));
+typedef uint8_t (*DuMacCellCfgCfm) ARGS((
+        Pst        *pst,        
+        MacCellCfgCfm *macCellCfgCfm ));
 
 /* Functions for UL CCCH Ind from MAC to DU APP*/
-typedef uint16_t (*DuMacUlCcchInd) ARGS((
-   Pst           *pst,
-   UlCcchIndInfo *ulCcchIndInfo ));
+typedef uint8_t (*DuMacUlCcchInd) ARGS((
+        Pst           *pst,
+        UlCcchIndInfo *ulCcchIndInfo ));
 
 /* Functions for DL CCCH Ind from DU APP to MAC*/
-typedef uint16_t (*DuMacDlCcchInd) ARGS((
-   Pst           *pst,
-   DlCcchIndInfo *dlCcchIndInfo ));
+typedef uint8_t (*DuMacDlCcchInd) ARGS((
+        Pst           *pst,
+        DlCcchIndInfo *dlCcchIndInfo ));
 
 /* UE create Request from DU APP to MAC*/
 typedef uint8_t (*DuMacUeCreateReq) ARGS((
-   Pst           *pst,
-   MacUeCfg      *ueCfg ));
-
-extern uint16_t packMacSlotInd(Pst *pst, SlotInfo *slotInfo );
-extern uint16_t unpackMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
-extern uint16_t duHandleSlotInd(Pst *pst, SlotInfo *slotInfo);
-extern uint16_t packMacCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo);
-extern uint16_t unpackMacCellStartReq(DuMacCellStartReq func, Pst *pst, Buffer *mBuf);
-extern uint16_t MacHdlCellStartReq(Pst *pst, MacCellStartInfo  *cellStartInfo);
-extern uint16_t packMacCellStopReq(Pst *pst, MacCellStopInfo  *cellStopInfo);
-extern uint16_t unpackMacCellStopReq(DuMacCellStopReq func, Pst *pst, Buffer *mBuf);
-extern uint16_t MacHdlCellStopReq(Pst *pst, MacCellStopInfo  *cellStopInfo);
-extern int  packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg);
-extern int MacHdlCellCfgReq(Pst *pst, MacCellCfg *macCellCfg);
-extern void cmUnpackLwLcMacCellCfg(DuMacCellCfgReq func, Pst *pst, Buffer *mBuf);
-extern int unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf);
-extern int duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
-extern uint16_t packMacStopInd(Pst *pst, MacCellStopInfo *cellId);
-extern uint16_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
-extern uint16_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellId);
-extern uint16_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
-extern uint16_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
-extern uint16_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
-extern uint16_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
-extern uint16_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf);
-extern uint16_t MacHdlDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
-extern uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
-extern uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf);
-extern uint8_t MacHdlUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
-uint8_t sendStopIndMacToDuApp();
+        Pst           *pst,
+        MacUeCfg      *ueCfg ));
+
+/* UE create Response from MAC to DU APP */
+typedef uint8_t (*MacDuUeCfgRspFunc) ARGS((
+        Pst           *pst, 
+        MacUeCfgRsp   *cfgRsp));
+
+/* UE Reconfig Request from DU APP to MAC*/
+typedef uint8_t (*DuMacUeReconfigReq) ARGS((
+        Pst           *pst,
+        MacUeCfg      *ueCfg ));
+
+uint8_t packMacSlotInd(Pst *pst, SlotIndInfo *slotInfo );
+uint8_t unpackMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleSlotInd(Pst *pst, SlotIndInfo *slotInfo);
+uint8_t packMacCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo);
+uint8_t unpackMacCellStartReq(DuMacCellStartReq func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcCellStartReq(Pst *pst, MacCellStartInfo  *cellStartInfo);
+uint8_t packMacCellStopReq(Pst *pst, MacCellStopInfo  *cellStopInfo);
+uint8_t unpackMacCellStopReq(DuMacCellStopReq func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcCellStopReq(Pst *pst, MacCellStopInfo  *cellStopInfo);
+uint8_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg);
+uint8_t unpackDuMacCellCfg(DuMacCellCfgReq func,  Pst *pst,  Buffer *mBuf);
+uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg);
+uint8_t packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+uint8_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+uint8_t packMacStopInd(Pst *pst, MacCellStopInfo *cellId);
+uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellId);
+uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
+uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
+uint8_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
+uint8_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
+uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
+uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
+uint8_t sendStopIndMacToDuApp(uint16_t cellId);
+uint8_t packDuMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp);
+uint8_t unpackDuMacUeCfgRsp(MacDuUeCfgRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp);
+uint8_t packDuMacUeReconfigReq(Pst *pst, MacUeCfg *ueCfg);
+uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg);
+
 #endif
 
 /**********************************************************************
-         End of file
-**********************************************************************/
+  End of file
+ **********************************************************************/