[Epic-ID: ODUHIGH-488][Task-ID: ODUHIGH-501] WG8 Alignment | Ue reset req and rsp
[o-du/l2.git] / src / cm / du_app_mac_inf.h
index c785ec2..5f94ae8 100644 (file)
 #define __MACINT_H__
 
 #define NUM_NUMEROLOGY 5  /* Number of numerology */
-#define MAXIMUM_TDD_PERIODICITY 5
-#define MAX_SYMB_PER_SLOT 14 
 
 #define NUM_SSB                1       /* max value is 64 */
 #define SSB_MASK_SIZE  1       /* SSB mask size is 32bit for sub6 */
-#define SIB1_NEW_TX_PERIOD      160
 #define SIB1_REPETITION_PERIOD   20
 #define CORESET_0_INDEX      0
 #define CORESET_1_INDEX      1
@@ -40,7 +37,6 @@
 #define SEARCHSPACE_4_INDEX   4
 #define SS_MONITORING_SLOT_SL1   0 /* all slots */
 #define SS_MONITORING_SYMBOL     0x2000; /* symbol-0, set 14th bit */
-#define SIB1_MCS  4
 
 /* Macro for Ue Context */
 #define MAX_NUM_SR_CFG_PER_CELL_GRP 8   /* Max number of scheduling request config per cell group */
 #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 MAX_NUM_SRB    8
-#define MAX_NUM_DRB    64
 #define MAX_NUM_SCELL  32
 
+/* PUCCH Configuration Macro */
+#define MAX_NUM_PUCCH_RESRC 128
+#define MAX_NUM_PUCCH_RESRC_SET 4
+#define MAX_NUM_PUCCH_PER_RESRC_SET 32
+#define MAX_NUM_SPATIAL_RELATIONS 8
+#define MAX_NUM_PUCCH_P0_PER_SET 8
+#define MAX_NUM_PATH_LOSS_REF_RS 4
+#define MAX_NUM_DL_DATA_TO_UL_ACK 15
+
 /* Event IDs */
 #define EVENT_MAC_CELL_CONFIG_REQ    200
 #define EVENT_MAC_CELL_CONFIG_CFM    201
-#define EVENT_MAC_CELL_START_REQ     202
-#define EVENT_MAC_CELL_STOP_REQ      203
-#define EVENT_MAC_SLOT_IND           204
+#define EVENT_MAC_CELL_START         202
+#define EVENT_MAC_CELL_STOP          203
+#define EVENT_MAC_CELL_UP_IND        204
 #define EVENT_MAC_STOP_IND           205
 #define EVENT_MAC_UL_CCCH_IND        206
 #define EVENT_MAC_DL_CCCH_IND        207
 #define EVENT_MAC_UE_CREATE_RSP      209
 #define EVENT_MAC_UE_RECONFIG_REQ    210
 #define EVENT_MAC_UE_RECONFIG_RSP    211
+#define EVENT_MAC_UE_DELETE_REQ      212
+#define EVENT_MAC_UE_DELETE_RSP      213
+#define EVENT_MAC_CELL_DELETE_REQ    214
+#define EVENT_MAC_CELL_DELETE_RSP    215
+#define EVENT_MAC_SLICE_CFG_REQ      216
+#define EVENT_MAC_SLICE_CFG_RSP      217
+#define EVENT_MAC_SLICE_RECFG_REQ    218
+#define EVENT_MAC_SLICE_RECFG_RSP    219
+#define EVENT_MAC_SLOT_IND           220
+#define EVENT_MAC_RACH_RESOURCE_REQ  221
+#define EVENT_MAC_RACH_RESOURCE_RSP  222
+#define EVENT_MAC_RACH_RESOURCE_REL  223
+#define EVENT_MAC_DL_PCCH_IND        224
+#define EVENT_MAC_UE_RESET_REQ       225
+#define EVENT_MAC_UE_RESET_RSP       226
 
 #define BSR_PERIODIC_TIMER_SF_10 10
 #define BSR_RETX_TIMER_SF_320 320
 #define BSR_SR_DELAY_TMR_2560 2560
 
+#define PAGING_SCHED_DELTA  4
+#define MAX_PLMN 2
+
 typedef enum
 {
    MAC_DU_APP_RSP_NOK,
@@ -114,29 +133,10 @@ typedef enum
    RSSI_UNIT_DBFS
 }RSSIMeasUnit;
 
-typedef enum
-{
-   DL_SLOT,
-   UL_SLOT,
-   GUARD_SLOT
-}SlotConfig;
-
-typedef enum
-{
-   TX_PRDCTY_MS_0P5,
-   TX_PRDCTY_MS_0P625,
-   TX_PRDCTY_MS_1,
-   TX_PRDCTY_MS_1P25,
-   TX_PRDCTY_MS_2,
-   TX_PRDCTY_MS_2P5,
-   TX_PRDCTY_MS_5,
-   TX_PRDCTY_MS_10
-}DlUlTxPeriodicity;
-
 typedef enum
 {
    BETA_PSS_0DB,
-   BETA_PSS_1DB
+   BETA_PSS_3DB
 }BetaPss;
 
 typedef enum 
@@ -480,42 +480,134 @@ typedef enum
    UNSPECIFIED_MISC_CAUSE
 }MiscFailCause;
 
-typedef struct failureCause
+typedef enum
+{
+   MCS_TABLE_QAM64,
+   MCS_TABLE_QAM256,
+   MCS_TABLE_QAM64_LOW_SE
+}McsTable;
+
+typedef enum
+{
+   RSRC_PRB,
+   RSRC_DRB,
+   RSRC_RRC_CONNECTED_USERS
+}ResourceType;
+
+typedef enum
+{
+   TRANSMISSION_ALLOWED,
+   STOP_TRANSMISSION,
+   RESTART_TRANSMISSION
+}DataTransmissionAction;
+
+typedef struct failureCause 
 {
    CauseGrp   type;
    union
    {
-      RadioNwLyrCause   radioNwCause;
-      TransLyrCause     transportCause;
-      ProtCause         protcolCause;
-      MiscFailCause     miscCause;
+      RadioNwLyrCause   radioNwResult;
+      TransLyrCause     transportResult;
+      ProtCause         protcolResult;
+      MiscFailCause     miscResult;
    }u;
 }FailureCause;
 
 typedef struct carrierCfg
 {
-   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 */
+   uint32_t   dlBw;                   /* DL bandwidth */
+   uint32_t   dlFreq;                 /* Absolute frequency of DL point A in KHz */
+   uint32_t   ulBw;                   /* UL bandwidth */
+   uint32_t   ulFreq;                 /* Absolute frequency of UL point A in KHz */
+   uint16_t   numTxAnt;               /* Number of Tx antennas */
+   uint16_t   numRxAnt;               /* Number of Rx antennas */
 }CarrierCfg;
 
+typedef enum
+{
+   OP_DISABLED,     
+   OP_ENABLED,     
+}MacOpState;
+
+typedef enum
+{
+   ADMIN_LOCKED,     
+   ADMIN_UNLOCKED,  
+   ADMIN_SHUTTING_DOWN, 
+}MacAdminState;
+
+typedef enum
+{
+   CELL_IDLE,
+   CELL_INACTIVE,
+   CELL_ACTIVE,
+}MacCellState;
+
+/*Spec Ref: 38.331: RadioLinkMonitoringConfig*/
+typedef enum
+{
+   BeamFailure,
+   Rlf,
+   Both
+}PurposeOfFailureDet;
+
+typedef struct plmnInfoList
+{
+   Plmn           plmn;
+   uint8_t        numSupportedSlice; /* Total slice supporting */
+   Snssai         **snssai;         /* List of supporting snssai*/
+}PlmnInfoList;
+
+typedef struct schPageCfg
+{
+  uint8_t  numPO;                    /*Derived from Ns*/
+  bool     poPresent;                /*Whether FirstPDCCH-MonitoringPO is present or not*/
+  uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/
+}SchPageCfg;
+
+typedef struct pdcchConfigSib1
+{
+   uint8_t coresetZeroIndex;     /* derived from 4 LSB of pdcchSib1 present in MIB */
+   uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
+}PdcchConfigSib1;
+
+typedef struct sib1CellCfg
+{
+   PdcchConfigSib1  pdcchCfgSib1;  /*Freq pos where UE may find SS/PBCH block with SIB1*/
+   uint8_t          *sib1Pdu;
+   uint16_t         sib1PduLen;
+   SchPageCfg       pagingCfg;
+} Sib1CellCfg; 
+
+
+typedef struct cellCfg
+{
+   MacOpState      opState;
+   MacAdminState   adminState;
+   MacCellState    cellState;
+   PlmnInfoList plmnInfoList[MAX_PLMN];   /* Consits of PlmnId and Snssai list */
+   uint32_t     phyCellId;                /* Physical cell id */
+   uint32_t     tac;
+   uint32_t     ssbFreq;
+   uint16_t     subCarrSpacing;
+   DuplexMode   dupType;          /* Duplex type: TDD/FDD */
+   uint8_t      numerology;       /* Supported numerology */
+   Sib1CellCfg  sib1Cfg;          /* SIB1 config */
+}CellCfg;
+
 typedef struct ssbCfg
 {
    uint32_t    ssbPbchPwr;       /* SSB block power */
-   BchPduOpt   bchPayloadFlag;   /* Options for generation of payload */
    uint8_t     scsCmn;           /* subcarrier spacing for common */
    uint16_t    ssbOffsetPointA;  /* SSB subcarrier offset from point A */
-   BetaPss     betaPss;
    SSBPeriod   ssbPeriod;        /* SSB Periodicity in msec */
    uint8_t     ssbScOffset;       /* Subcarrier Offset */
-   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 */
+   BetaPss     betaPss;
+   BchPduOpt   bchPayloadFlag;   /* Options for generation of payload */
+   uint8_t     mibPdu[3];           /* MIB payload */
+   uint8_t     dmrsTypeAPos;     /* DMRS Type A position */
 }SsbCfg;
 
 typedef struct fdmInfo
@@ -524,47 +616,25 @@ typedef struct fdmInfo
    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 */
    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 */
-   uint8_t       msg1Fdm;             /* PRACH FDM (1,2,4,8) */
-   uint8_t       rootSeqLen;          /* Root sequence length */
+   uint8_t       msg1Fdm;             /* Number of RACH frequency domain occasions/ PRACH FDM (1,2,4,8) */
+   uint8_t       prachCfgIdx;         /* PRACH Cfg Index */
    PrachFdmInfo  fdm[8];              /* FDM info */
+   RstSetCfg     prachRstSetCfg;      /* PRACH restricted set config */
    uint8_t       ssbPerRach;          /* SSB per RACH occassion */
-   bool          prachMultCarrBand;   /* Multiple carriers in Band */
-   uint8_t       prachRestrictedSet; /* Support for PRACH restricted set */
+   uint8_t       totalNumRaPreamble;  /* Total number of RA preambles */
+   uint8_t       numCbPreamblePerSsb; /* Number of CB preamble per SSB */
+   uint16_t      msg1FreqStart;       /* Msg1-FrequencyStart */
    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;
-   DlUlTxPeriodicity  tddPeriod;      /* DL UL Transmission periodicity */
-   SlotConfig         slotCfg[MAXIMUM_TDD_PERIODICITY][MAX_SYMB_PER_SLOT]; 
-}TDDCfg;
-
-typedef struct sib1CellCfg
-{
-   uint8_t  *sib1Pdu;
-   uint16_t sib1PduLen;
-   uint16_t sib1NewTxPeriod;
-   uint16_t sib1RepetitionPeriod;
-   uint8_t coresetZeroIndex;     /* derived from 4 LSB of pdcchSib1 present in MIB */
-   uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
-   uint16_t sib1Mcs;
-} Sib1CellCfg; 
-
 typedef struct bwpParams
 {
    uint16_t firstPrb;
@@ -599,12 +669,19 @@ typedef struct pdcchConfigCommon
    uint8_t raSearchSpaceId;
 }PdcchConfigCommon;
 
-typedef struct pdschConfigCommon
+typedef struct pdschCfgCommTimeDomRsrcAlloc
 {
    uint8_t k0;
    uint8_t mappingType;
    uint8_t startSymbol;
    uint8_t lengthSymbol;
+}PdschCfgCommTimeDomRsrcAlloc;
+
+typedef struct pdschConfigCommon
+{
+   uint8_t  numTimeDomAlloc;
+   /* PDSCH time domain DL resource allocation list */
+   PdschCfgCommTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_DL_ALLOC]; 
 }PdschConfigCommon;
 
 typedef struct pucchConfigCommon
@@ -613,65 +690,121 @@ typedef struct pucchConfigCommon
    uint8_t pucchGroupHopping;
 }PucchConfigCommon;
 
+/* PUSCH Time Domain Resource Allocation */
+typedef struct puschTimeDomRsrcAlloc
+{
+   uint8_t             k2;
+   CommonMappingType   mappingType;
+   uint8_t             startSymbol;
+   uint8_t             symbolLength;
+   uint8_t             startSymbolAndLength;
+}PuschTimeDomRsrcAlloc;
+
+
 typedef struct puschConfigCommon
 {
    /* PUSCH-TimeDomainResourceAllocation info */
-   uint8_t k2;
-   uint8_t mappingType;
-   uint8_t startSymbol;
-   uint8_t lengthSymbol;
+   uint8_t                 numTimeDomRsrcAlloc;
+   PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
 }PuschConfigCommon;
 
 typedef struct bwpDlConfig
 {
-   BwpParams      bwp;
+   BwpParams         bwp;
    PdcchConfigCommon pdcchCommon;
    PdschConfigCommon pdschCommon;
 }BwpDlConfig;
 
 typedef struct bwpUlConfig
 {
-   BwpParams      bwp;
+   BwpParams         bwp;
    // rach config common sent in PrachCfg
    PucchConfigCommon pucchCommon;
    PuschConfigCommon puschCommon;
 }BwpUlConfig;
 
+#ifdef NR_DRX
+/* The following list of structures is taken from the DRX-Config section of specification 33.331. */
+typedef struct drxOnDurationTimer
+{
+   bool  onDurationTimerValInMs;
+   union
+   {
+      uint8_t  subMilliSeconds;
+      uint16_t milliSeconds;
+   }onDurationtimerValue;
+}DrxOnDurationTimer;
+
+typedef struct drxLongCycleStartOffset
+{
+   uint16_t drxLongCycleStartOffsetChoice;
+   uint16_t drxLongCycleStartOffsetVal;
+}DrxLongCycleStartOffset;
+
+typedef struct shortDrx
+{
+   uint16_t   drxShortCycle;
+   uint8_t    drxShortCycleTimer;
+}ShortDrx;
+
+typedef struct drxCfg
+{
+   DrxOnDurationTimer       drxOnDurationTimer;   
+   uint16_t                 drxInactivityTimer;
+   uint8_t                  drxHarqRttTimerDl;
+   uint8_t                  drxHarqRttTimerUl;
+   uint16_t                 drxRetransmissionTimerDl;
+   uint16_t                 drxRetransmissionTimerUl;
+   DrxLongCycleStartOffset  drxLongCycleStartOffset;
+   bool                     shortDrxPres;
+   ShortDrx                 shortDrx;
+   uint8_t                  drxSlotOffset;
+}DrxCfg;
+#endif
+
+typedef struct precodingConf
+{
+   uint16_t numLayers;
+   uint16_t numAntPorts;
+}PrecodingConf;
+
+typedef struct beamformingConf
+{    
+   uint16_t numOfBeams;
+   uint16_t numTxRUs;
+   uint16_t beamIdx;
+   uint16_t beamType;
+   uint32_t beamAzimuth;
+   uint32_t beamTilt;
+   uint32_t beamHorizWidth;
+   uint32_t beamVertWidth;
+   uint32_t coverageShape;
+   uint32_t digitalTilt;
+   uint32_t digitalAzimuth;    
+}BeamformingConf;
+
 typedef struct macCellCfg
 {
-   uint16_t            cellId;           /* Cell Id */
-   uint8_t             carrierId;        /* Carrired Index */
-   uint16_t            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 */
-   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 */
+   uint16_t         cellId;           /* Cell Id */
+   CarrierCfg       carrCfg;          /* Carrier configuration */
+   CellCfg          cellCfg;          /* Cell Configuration*/
+   SsbCfg           ssbCfg;           /* SSB configuration */          
+   PrachCfg         prachCfg;         /* PRACH Configuration */
+#ifdef NR_TDD
+   TDDCfg           tddCfg;           /* TDD periodicity and slot configuration */
+#endif
+   BwpDlConfig      initialDlBwp;     /* Initial DL BWP */
+   BwpUlConfig      initialUlBwp;     /* Initial UL BWP */
+   PrecodingConf    precodingConf;
+   BeamformingConf  beamCfg;
 }MacCellCfg;
 
 typedef struct macCellCfgCfm
 {
-   uint16_t            cellId;
+   uint16_t       cellId;
    uint8_t        rsp; 
 }MacCellCfgCfm;
 
-typedef struct macCellStartInfo
-{
-   uint16_t cellId;
-}MacCellStartInfo;
-
-typedef struct macCellStopInfo
-{
-   uint16_t cellId;
-}MacCellStopInfo;
-
 typedef struct ulCcchInd
 {
    uint16_t cellId;
@@ -746,6 +879,10 @@ typedef struct macCellGrpCfg
    BsrTmrCfg   bsrTmrCfg;
    bool        phrCfgSetupPres;   /* true/false: phrCfgSetup/phrCfgRelease */
    PhrCfg      phrCfg;
+#ifdef NR_DRX
+   bool        drxCfgPresent;
+   DrxCfg      drxCfg;
+#endif
 }MacCellGrpCfg;
 
 typedef struct phyCellGrpCfg
@@ -797,6 +934,7 @@ typedef struct pdcchConfig
 /* PDSCH time domain resource allocation */
 typedef struct pdschTimeDomRsrcAlloc
 {
+   uint8_t           *k0;
    CommonMappingType mappingType;
    uint8_t           startSymbol;
    uint8_t           symbolLength;
@@ -845,15 +983,51 @@ typedef struct initialDlBwp
    PdschConfig   pdschCfg;
 }InitialDlBwp;
 
-/* BWP Downlink common */
-typedef struct bwpDlCommon
+/*Spec 38.331 "SPS-Config'*/
+typedef struct spsConfig
+{
+   uint16_t     periodicity;
+   uint8_t      numOfHqProcess;
+   uint8_t      n1PucchAN;
+   McsTable     mcsTable;
+}SpsConfig;
+
+typedef uint8_t RadioLinkMonitoringRsId;
+
+typedef struct radioLinkMonRS
+{
+   RadioLinkMonitoringRsId radioLinkMonitoringRsId;
+   PurposeOfFailureDet      purpose; 
+   union
+   {
+      uint8_t ssbIndx;
+      uint8_t nzpCsiRsResId;
+   }detectionRes;
+}RadioLinkMonRS;
+
+typedef struct radioLinkConfig
 {
-}BwpDlCommon;
+   RadioLinkMonRS             failurDetResAddModList[1];
+   RadioLinkMonitoringRsId   failurDetResRelList[1];
+   uint8_t                    beamFailureInstanceMaxCount;
+   uint8_t                    beamFailureDetectionTimer;
+}RadioLinkConfig;
+
+/* Spec 38.331, 'BWP-DownlinkDedicated'*/
+typedef struct bwpDlCfgDed
+{
+  PdcchConfig     pdcchCfgDed;
+  PdschConfig     pdschCfgDed;
+  SpsConfig       spsCfgDed;
+  RadioLinkConfig radioLnkMonCfgDed;
+}BwpDlCfgDed;
 
 /* Downlink BWP information */
 typedef struct dlBwpInfo
 {
    uint8_t          bwpId;
+   BwpDlConfig      bwpCommon;
+   BwpDlCfgDed      bwpDedicated;
 }DlBwpInfo;
 
 /* PDCCH Serving Cell configuration */
@@ -867,9 +1041,171 @@ typedef struct pdschServCellCfg
 }PdschServCellCfg;
 
 /* PUCCH Configuration */
+
+typedef struct pucchResrcSetInfo
+{
+   uint8_t resrcSetId;
+   uint8_t resrcListCount;
+   uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET];
+   uint8_t maxPayLoadSize;
+}PucchResrcSetInfo;
+
+typedef struct pucchResrcSetCfg
+{
+   uint8_t resrcSetToAddModListCount;
+   PucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET];
+   uint8_t resrcSetToRelListCount;
+   uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC];
+}PucchResrcSetCfg;
+
+typedef struct pucchFormat0
+{
+   uint8_t initialCyclicShift;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+}PucchFormat0;
+
+typedef struct pucchFormat1
+{
+   uint8_t initialCyclicShift;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+   uint8_t timeDomOCC;
+}PucchFormat1;
+
+typedef struct pucchFormat2_3
+{
+   uint8_t numPrbs;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+}PucchFormat2_3;
+
+typedef struct pucchFormat4
+{
+   uint8_t numSymbols;
+   uint8_t occLen;
+   uint8_t occIdx;
+   uint8_t startSymbolIdx;
+}PucchFormat4;
+
+typedef struct pucchResrcInfo
+{
+   uint8_t  resrcId;
+   uint16_t startPrb;
+   uint8_t  intraFreqHop;
+   uint16_t secondPrbHop;
+   uint8_t  pucchFormat;
+   union
+   {
+      PucchFormat0   *format0; 
+      PucchFormat1   *format1;
+      PucchFormat2_3 *format2;
+      PucchFormat2_3 *format3;
+      PucchFormat4   *format4;
+   }PucchFormat;
+}PucchResrcInfo;
+
+typedef struct pucchResrcCfg
+{
+   uint8_t resrcToAddModListCount;
+   PucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC];
+   uint8_t resrcToRelListCount;
+   uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC];
+}PucchResrcCfg;
+
+typedef struct pucchFormatCfg
+{
+   bool interSlotFreqHop;
+   bool addDmrs;
+   uint8_t maxCodeRate;
+   uint8_t numSlots;
+   bool    pi2BPSK;
+   bool    harqAckCSI;
+}PucchFormatCfg;
+
+typedef struct schedReqResrcInfo
+{
+   uint8_t resrcId;
+   uint8_t requestId;
+   uint8_t periodicity;
+   uint16_t offset;
+   uint8_t resrc;
+}SchedReqResrcInfo;
+
+typedef struct pucchSchedReqCfg
+{
+   uint8_t           schedAddModListCount;
+   SchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+   uint8_t           schedRelListCount;
+   uint8_t           schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+}PucchSchedReqCfg;
+
+typedef struct spatialRelationInfo
+{
+   uint8_t spatialRelationId;
+   uint8_t servCellIdx;
+   uint8_t pathLossRefRSId;
+   uint8_t p0PucchId;
+   uint8_t closeLoopIdx;
+}SpatialRelationInfo;
+
+typedef struct pucchSpatialCfg
+{
+   uint8_t spatialAddModListCount;
+   SpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS];
+   uint8_t spatialRelListCount;
+   uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS];
+}PucchSpatialCfg;
+
+typedef struct p0PucchCfg
+{
+   uint8_t p0PucchId;
+   int     p0PucchVal;
+}P0PucchCfg;
+
+typedef struct pathLossRefRSCfg
+{
+   uint8_t pathLossRefRSId;
+}PathLossRefRSCfg;
+
+typedef struct pucchMultiCsiCfg
+{
+   uint8_t  multiCsiResrcListCount;
+   uint8_t  multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1];
+}PucchMultiCsiCfg;
+
+typedef struct pucchDlDataToUlAck
+{
+   uint8_t  dlDataToUlAckListCount;
+   uint8_t  dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK];
+}PucchDlDataToUlAck;
+
+typedef struct pucchPowerControl
+{
+   int deltaF_Format0;
+   int deltaF_Format1;
+   int deltaF_Format2;
+   int deltaF_Format3;
+   int deltaF_Format4;
+   uint8_t p0SetCount;
+   P0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET];
+   uint8_t pathLossRefRSListCount;
+   PathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS];
+}PucchPowerControl;
+
 typedef struct pucchCfg
 {
-   /* TODO : Not used currently */ 
+   PucchResrcSetCfg  *resrcSet;
+   PucchResrcCfg     *resrc;
+   PucchFormatCfg    *format1; 
+   PucchFormatCfg    *format2; 
+   PucchFormatCfg    *format3; 
+   PucchFormatCfg    *format4;
+   PucchSchedReqCfg  *schedReq;
+   PucchMultiCsiCfg  *multiCsiCfg;
+   PucchSpatialCfg   *spatialInfo;
+   PucchDlDataToUlAck *dlDataToUlAck;
+   PucchPowerControl *powerControl;
 }PucchCfg;
 
 /* Transform precoding disabled */
@@ -885,16 +1221,6 @@ typedef struct dmrsUlCfg
    TransPrecodDisabled   transPrecodDisabled;  /* Transform precoding disabled */
 }DmrsUlCfg;
 
-/* PUSCH Time Domain Resource Allocation */
-typedef struct puschTimeDomRsrcAlloc
-{
-   uint8_t   k2;
-   CommonMappingType   mappingType;
-   uint8_t           startSymbol;
-   uint8_t           symbolLength;
-   uint8_t   startSymbolAndLength;
-}PuschTimeDomRsrcAlloc;
-
 /* PUSCH Configuration */
 typedef struct puschCfg
 {
@@ -915,48 +1241,135 @@ typedef struct initialUlBwp
    PuschCfg   puschCfg;
 }InitialUlBwp;
 
+typedef struct bwpUlCfgDed
+{
+   PucchCfg   pucchCfg;
+   PuschCfg   puschCfg;
+}BwpUlCfgDed;
+
 /* Uplink BWP information */
 typedef struct ulBwpInfo
 {
-   uint8_t        bwpId;
+   uint8_t          bwpId;
+   BwpUlConfig      bwpCommon;
+   BwpUlCfgDed      bwpDed;
 }UlBwpInfo;
 
+typedef struct rachCfgGeneric
+{
+   uint8_t      prachCfgIdx;       /* PRACH config idx */
+   uint8_t      msg1Fdm;           /* PRACH FDM (1,2,4,8) */
+   uint16_t     msg1FreqStart;     /* Msg1-FrequencyStart */
+   uint8_t      zeroCorrZoneCfg;   /* Zero correlation zone cofig */
+   int16_t      preambleRcvdTargetPower; /*Prach Target power received*/
+   uint8_t      preambleTransMax;  /*Preamble Transmission Max power*/
+   uint8_t      pwrRampingStep;    /*Power Ramping Step*/
+   uint8_t      raRspWindow;       /* RA Response Window */
+}RachCfgGeneric;
+
+typedef struct raPrioritization
+{
+   uint8_t powerRampingStepHighPriority;
+   uint8_t scalingFactorBI;
+}RaPrioritization;
+
+typedef struct bfrCsiRsRes
+{
+   uint8_t csrRsIndex;
+   uint8_t raOccList;
+   uint8_t raPreambleIndex;
+}BfrCsiRsRes;
+
+typedef struct bfrSsbRes
+{
+   uint16_t ssbIndex;
+   uint8_t raPreambleIndex;
+}BfrSsbRes;
+
+typedef struct prachResDedBfr
+{
+   BfrSsbRes    ssb;
+   BfrCsiRsRes  csiRs;
+}PrachResDedBfr;
+
+/*Spec 38.331 'BeamFailureRecoveryConfig' */
+typedef struct beamFailRecoveryCfg
+{
+   uint8_t             rootSeqIndexBfr;
+   RachCfgGeneric      rachCfgBfr;
+   uint8_t             rsrpThreshSsbBfr;
+   PrachResDedBfr      candidteBeamRSList;
+   uint8_t             ssbPerachBfr;
+   uint8_t             raSsbOccMaskIndex;
+   uint8_t             recoverySearchSpaceId;
+   RaPrioritization    raPrioBfr;
+   uint16_t            bfrTimer;
+   uint8_t             msg1SubcSpacing;
+}BeamFailRecoveryCfg;
+
 /* Serving cell configuration */
 typedef struct servCellCfgInfo
+{
+   InitialDlBwp         initDlBwp;
+   RadioLinkConfig      radioLinkMonConfig;
+   uint8_t              numDlBwpToAdd;
+   DlBwpInfo            dlBwpToAddList[MAX_NUM_BWP];
+   uint8_t              firstActvDlBwpId;
+   uint8_t              defaultDlBwpId;
+   uint8_t              *bwpInactivityTmr;
+   PdschServCellCfg     pdschServCellCfg;
+   InitialUlBwp         initUlBwp;
+   BeamFailRecoveryCfg  beamFailureRecoveryCfg;
+   uint8_t              numUlBwpToAdd;
+   UlBwpInfo            ulBwpToAddList[MAX_NUM_BWP];
+   uint8_t              firstActvUlBwpId;
+}ServCellCfgInfo;
+
+/* Special cell configuration */
+typedef struct spCellCfg
+{
+   uint8_t           servCellIdx;
+   ServCellCfgInfo   servCellCfg;
+}SpCellCfg;
+
+typedef struct bwpRelInfo
+{
+   uint8_t bwpId;
+}BwpRelInfo;
+
+/* Serving cell Re-configuration */
+typedef struct servCellRecfgInfo
 {
    InitialDlBwp       initDlBwp;
-   uint8_t            numDlBwpToAdd;
-   DlBwpInfo          DlBwpToAddList[MAX_NUM_BWP];
+   RadioLinkConfig    radioLinkMonConfig;
+   uint8_t            numDlBwpToAddOrMod;
+   DlBwpInfo          dlBwpToAddOrModList[MAX_NUM_BWP];
+   uint8_t            numDlBwpToRel;
+   BwpRelInfo         dlBwpToRelList[MAX_NUM_BWP];
    uint8_t            firstActvDlBwpId;
    uint8_t            defaultDlBwpId;
    uint8_t            *bwpInactivityTmr;
    PdschServCellCfg   pdschServCellCfg;
    InitialUlBwp       initUlBwp;
-   uint8_t            numUlBwpToAdd;
-   UlBwpInfo          UlBwpToAddList[MAX_NUM_BWP];
+   uint8_t            numUlBwpToAddOrMod;
+   UlBwpInfo          ulBwpToAddOrModList[MAX_NUM_BWP];
+   uint8_t            numUlBwpToRel;
+   BwpRelInfo         ulBwpToRelList[MAX_NUM_BWP];
    uint8_t            firstActvUlBwpId;
-}ServCellCfgInfo;
+}ServCellRecfgInfo;
 
-/* Special cell configuration */
-typedef struct spCellCfg
+/* Special cell Re-configuration */
+typedef struct spCellRecfg 
 {
-   uint8_t           servCellIdx;
-   ServCellCfgInfo   servCellCfg;
-}SpCellCfg;
+   uint8_t             servCellIdx;
+   ServCellRecfgInfo   servCellCfg;
+}SpCellRecfg;
 
 typedef struct ambrCfg
 {
    uint32_t ulBr;   /* UL Bit rate */
-   uint32_t dlBr;   /* DL Bit rate */
 }AmbrCfg;
 
-/* Single Network Slice Selection assistance Info */
-typedef struct snssai
-{
-   uint8_t sst;                /* Slice Type */
-   uint8_t sd[SD_SIZE];        /* Slice Differentiator */
-}Snssai;
-
 typedef struct nonDynFiveQi
 {
    uint16_t   fiveQi;
@@ -1015,36 +1428,75 @@ typedef struct ulLcCfg
    BucketSizeDur bsd;        // bucketSizeDuration
 }UlLcCfg;
 
-typedef struct duLcCfg
+typedef struct dlLcCfg
 {
    LcPriority lcp;      // logical Channel Prioritization
 }DlLcCfg;
 
 typedef struct lcCfg
 {
-   ConfigType configType;
    uint8_t lcId;
-   DrbQosInfo *drbQos; 
    Snssai  *snssai;
+   DrbQosInfo *drbQos; 
    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 cellId;
-   uint8_t  ueIdx;
-   uint16_t crnti;
-   MacCellGrpCfg macCellGrpCfg;
-   PhyCellGrpCfg phyCellGrpCfg;
-   SpCellCfg spCellCfg;
-   AmbrCfg   *ambrCfg;
-   uint8_t numLcs;
-   LcCfg lcCfgList[MAX_NUM_LC];
-   UeCfgState macUeCfgState; /* InActive / Completed */
+   uint16_t               cellId;
+   uint8_t                ueId;
+   uint8_t                beamIdx; 
+   uint16_t               crnti;
+   bool                   macCellGrpCfgPres;
+   MacCellGrpCfg          macCellGrpCfg;
+   bool                   phyCellGrpCfgPres;
+   PhyCellGrpCfg          phyCellGrpCfg;
+   bool                   spCellCfgPres;
+   SpCellCfg              spCellCfg;
+   AmbrCfg                *ambrCfg;
+   ModulationInfo         dlModInfo;    /* DL modulation info */ 
+   ModulationInfo         ulModInfo;    /* UL modulation info */
+   uint8_t                numLcs;
+   LcCfg                  lcCfgList[MAX_NUM_LC];
 }MacUeCfg;
 
+/* UE Re-configuration */
+typedef struct macUeRecfg
+{
+   uint16_t        cellId;
+   uint8_t         ueId;
+   uint8_t         beamIdx;
+   uint16_t        crnti;
+   bool            macCellGrpRecfgPres;
+   MacCellGrpCfg   macCellGrpRecfg;
+   bool            phyCellGrpRecfgPres;
+   PhyCellGrpCfg   phyCellGrpRecfg;
+   bool            spCellRecfgPres;
+   SpCellRecfg     spCellRecfg;
+   AmbrCfg         *ambrRecfg;
+   ModulationInfo  dlModInfo;
+   ModulationInfo  ulModInfo;
+   uint8_t         numLcsToAdd;
+   LcCfg           lcCfgAdd[MAX_NUM_LC];
+   uint8_t         numLcsToDel;
+   uint8_t         lcIdToDel[MAX_NUM_LC];
+   uint8_t         numLcsToMod;
+   LcCfg           lcCfgMod[MAX_NUM_LC];
+   DataTransmissionAction transmissionAction;
+#ifdef NR_DRX   
+   bool            drxConfigIndicatorRelease;
+#endif
+}MacUeRecfg;
+
 typedef struct nrcgi
 {
    Plmn      plmn;
@@ -1072,7 +1524,7 @@ typedef struct sCellFailInfo
 typedef struct ueCfgRsp
 {
    uint16_t       cellId;
-   uint16_t       ueIdx;
+   uint16_t       ueId;
    MacRsp         result;
    uint8_t        numSRBFailed;   /* valid values : 0 to MAX_NUM_SRB */ 
    SRBFailInfo    *failedSRBlisti;
@@ -1080,27 +1532,166 @@ typedef struct ueCfgRsp
    DRBFailInfo    *failedDRBlist;
    uint8_t        numSCellFailed; /* valid values : 0 to MAX_NUM_SCELL */
    SCellFailInfo  *failedSCellList;
+   uint8_t        numDRBModFailed;   /* valid values : 0 to MAX_NUM_DRB */
+   DRBFailInfo    *failedDRBModlist;
 }MacUeCfgRsp;
 
+typedef struct ueCfgRsp MacUeRecfgRsp;
+
+typedef struct rachRsrcReq
+{
+   uint16_t cellId;
+   uint16_t ueId;
+   uint8_t  numSsb;
+   uint8_t  ssbIdx[MAX_NUM_SSB];
+}MacRachRsrcReq;
+
+typedef struct macCfraSsbResource
+{
+   uint8_t  ssbIdx;
+   uint8_t  raPreambleIdx;
+}MacCfraSsbResource;
+
+typedef struct macCfraResource
+{
+   uint8_t   numSsb;
+   MacCfraSsbResource ssbResource[MAX_NUM_SSB];
+}MacCfraResource;
+
+typedef struct macRachRsrcRsp
+{
+   uint16_t   cellId;
+   uint16_t   ueId;
+   MacRsp     result;
+   uint16_t   newCrnti;     /* This parameter maps to 3GPP TS 38.331 newUE-Identity */
+   MacCfraResource  cfraResource;
+}MacRachRsrcRsp;
+
+typedef struct macRachRsrcRel
+{
+   uint16_t cellId;
+   uint16_t ueId;
+   uint16_t crnti;
+}MacRachRsrcRel;
+
+typedef struct ueDelete
+{
+    uint16_t cellId;
+    uint8_t  ueId;
+    uint16_t crnti;
+}MacUeDelete;
+
+typedef struct ueDeleteRsp
+{
+   uint16_t cellId;
+   uint8_t  ueId;
+   CauseOfResult  status;
+}MacUeDeleteRsp;
+
+typedef struct macCellDeleteReq
+{
+   uint16_t cellId;
+}MacCellDeleteReq;
+
+typedef struct macCellDeleteRsp
+{
+   uint16_t cellId;
+   CauseOfResult  status;
+}MacCellDeleteRsp;
+
+typedef struct macSliceCfgRsp 
+{
+   Snssai     snssai;
+   MacRsp     rsp;
+   CauseOfResult  cause;  
+}MacSliceCfgRsp;
+
+typedef struct rrmPolicyRatio
+{
+   uint8_t maxRatio;
+   uint8_t minRatio;
+   uint8_t dedicatedRatio;
+}RrmPolicyRatio;
+
+typedef struct rrmPolicyMemberList
+{
+   Plmn    plmn;
+   Snssai  snssai;
+}RrmPolicyMemberList;
+
+typedef struct macSliceRrmPolicy
+{
+   ResourceType        resourceType;
+   uint8_t             numOfRrmPolicyMem;
+   RrmPolicyMemberList **rRMPolicyMemberList;
+   RrmPolicyRatio      policyRatio;
+}MacSliceRrmPolicy;
+
+typedef struct macSliceCfgReq
+{
+   uint8_t           numOfRrmPolicy;
+   MacSliceRrmPolicy **listOfRrmPolicy;
+}MacSliceCfgReq;
+
+/*As per ORAN-WG8, Slice Cfg and ReCfg are same structures*/
+typedef struct macSliceCfgReq MacSliceRecfgReq;
+typedef struct macSliceCfgRsp MacSliceRecfgRsp;
+
+typedef struct dlPcchInd
+{
+   uint16_t  cellId;
+   uint16_t  pf;
+   uint8_t   i_s;
+   uint16_t  pduLen;
+   uint8_t  *pcchPdu;
+}DlPcchInd;
+
+typedef struct cellInfo
+{
+    SlotTimingInfo slotInfo;
+    uint16_t       cellId;
+}CellInfo;
+
+typedef struct cellInfo CellStartInfo;
+typedef struct cellInfo CellStopInfo;
+
+typedef struct ueReset
+{
+    uint16_t cellId;
+    uint8_t  ueId;
+}MacUeResetReq;
+
+typedef struct ueResetRsp
+{
+   uint16_t cellId;
+   uint8_t  ueId;
+   CauseOfResult  status;
+}MacUeResetRsp;
+
+/* Functions for CellUp Ind from MAC to DU APP*/
+typedef uint8_t (*DuMacCellUpInd) ARGS((
+        Pst       *pst,
+        OduCellId *cellId ));
+
 /* Functions for slot Ind from MAC to DU APP*/
 typedef uint8_t (*DuMacSlotInd) ARGS((
         Pst       *pst,
-        SlotIndInfo  *slotInfo ));
+        SlotTimingInfo *slotIndInfo));
 
 /* Functions for stop Ind from MAC to DU APP*/
 typedef uint8_t (*DuMacStopInd) ARGS((
-        Pst       *pst,
-        MacCellStopInfo  *cellId ));
+        Pst        *pst,
+        OduCellId  *cellId ));
 
 /* Functions for mac cell start req */
-typedef uint8_t (*DuMacCellStartReq) ARGS((
-        Pst               *pst, 
-        MacCellStartInfo  *cellStartInfo ));
+typedef uint8_t (*DuMacCellStart) ARGS((
+        Pst        *pst, 
+        CellStartInfo  *cellId));
 
 /* Functions for mac cell stop request */
-typedef uint8_t (*DuMacCellStopReq) ARGS((
-        Pst               *pst,
-        MacCellStopInfo  *cellStopInfo ));
+typedef uint8_t (*DuMacCellStop) ARGS((
+        Pst        *pst,
+        CellStopInfo  *cellId ));
 
 /* Function pointers for packing macCellCfg Request and Confirm */
 typedef uint8_t (*packMacCellCfgReq) ARGS((
@@ -1139,29 +1730,106 @@ typedef uint8_t (*MacDuUeCfgRspFunc) ARGS((
         Pst           *pst, 
         MacUeCfgRsp   *cfgRsp));
 
-/* UE Reconfig Request from DU APP to MAC*/
+/* UE Reconfig Request from DU APP to MAC */
 typedef uint8_t (*DuMacUeReconfigReq) ARGS((
         Pst           *pst,
-        MacUeCfg      *ueCfg ));
+        MacUeRecfg      *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);
+/* UE Reconfig Response from MAC to DU APP */
+typedef uint8_t (*MacDuUeRecfgRspFunc) ARGS((
+        Pst           *pst, 
+        MacUeRecfgRsp   *cfgRsp));
+
+/* RACH Resource Request from DU APP to MAC */
+typedef uint8_t (*DuMacRachRsrcReq) ARGS((
+    Pst            *pst,
+    MacRachRsrcReq *rachRsrcReq));
+
+/* RACH Resource Response from MAC to DU APP */
+typedef uint8_t (*MacDuRachRsrcRspFunc) ARGS((
+    Pst            *pst,
+    MacRachRsrcRsp *rachRsrcRsp));
+
+/* RACH Resource Release from DU APP to MAC */
+typedef uint8_t (*DuMacRachRsrcRel) ARGS((
+    Pst            *pst,
+    MacRachRsrcRel *rachRsrcRel));
+
+/* UE Delete Request from DU APP to MAC*/
+typedef uint8_t (*DuMacUeDeleteReq) ARGS((
+     Pst           *pst,
+     MacUeDelete   *ueDel ));
+
+/* UE Delete Response from MAC to DU APP*/
+typedef uint8_t (*MacDuUeDeleteRspFunc) ARGS((
+     Pst            *pst,
+     MacUeDeleteRsp *deleteRsp));
+
+/* Cell Delete Request from DU APP to MAC*/
+typedef uint8_t (*DuMacCellDeleteReq) ARGS((
+     Pst           *pst,
+     MacCellDeleteReq *cellDelete ));
+
+/* Cell Delete Response from MAC to DU APP*/
+typedef uint8_t (*MacDuCellDeleteRspFunc) ARGS((
+     Pst            *pst,
+     MacCellDeleteRsp *cellDeleteRsp));
+
+/* Slice Cfg Request from DU APP to MAC*/
+typedef uint8_t (*DuMacSliceCfgReq) ARGS((
+     Pst           *pst,
+     MacSliceCfgReq *CfgReq));
+
+/* Slice Cfg Response from MAC to DU APP */
+typedef uint8_t (*MacDuSliceCfgRspFunc) ARGS((
+        Pst           *pst, 
+        MacSliceCfgRsp   *cfgRsp));
+
+/* Slice ReReCfg Request from DU APP to MAC*/
+typedef uint8_t (*DuMacSliceRecfgReq) ARGS((
+     Pst           *pst,
+     MacSliceRecfgReq *CfgReq));
+
+/* Slice ReReCfg Response from MAC to DU APP */
+typedef uint8_t (*MacDuSliceRecfgRspFunc) ARGS((
+        Pst           *pst,
+        MacSliceRecfgRsp   *cfgRsp));
+
+/* Pcch indication from DU APP to MAC*/
+typedef uint8_t (*DuMacDlPcchInd) ARGS((
+     Pst        *pst,
+     DlPcchInd *pcchInd));
+
+/* UE Reset Request from DU APP to MAC*/
+typedef uint8_t (*DuMacUeResetReq) ARGS((
+     Pst           *pst,
+     MacUeResetReq *ueReset ));
+
+/* UE Reset Response from MAC to DU APP*/
+typedef uint8_t (*MacDuUeResetRspFunc) ARGS((
+     Pst            *pst,
+     MacUeResetRsp *resetRsp));
+
+uint64_t ueBitMapPerCell[MAX_NUM_CELL]; /* Bit Map to store used/free UE-IDX per Cell */
+
+uint8_t packMacCellUpInd(Pst *pst, OduCellId *cellId);
+uint8_t unpackMacCellUpInd(DuMacCellUpInd func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId);
+uint8_t packMacCellStart(Pst *pst, CellStartInfo *cellStartInfo);
+uint8_t unpackMacCellStart(DuMacCellStart func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcCellStart(Pst *pst, CellStartInfo *cellStartInfo);
+uint8_t packMacCellStop(Pst *pst, CellStopInfo *cellStopInfo);
+uint8_t unpackMacCellStop(DuMacCellStop func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcCellStop(Pst *pst, CellStopInfo *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 packMacStopInd(Pst *pst, OduCellId *cellId);
 uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
-uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellId);
+uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId);
 uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
 uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
 uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
@@ -1175,12 +1843,63 @@ 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 packDuMacUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg);
 uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf);
-uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg);
+uint8_t MacProcUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg);
+uint8_t packDuMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp);
+uint8_t unpackDuMacUeRecfgRsp(MacDuUeRecfgRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t DuProcMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp);
+uint8_t packDuMacRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
+uint8_t unpackMacRachRsrcReq(DuMacRachRsrcReq func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
+uint8_t packDuMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
+uint8_t unpackDuMacRachRsrcRsp(MacDuRachRsrcRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t DuProcMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
+uint8_t packDuMacRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel);
+uint8_t unpackMacRachRsrcRel(DuMacRachRsrcRel func, Pst *pst, Buffer *mBuf);
+uint8_t MacProcRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel);
+uint8_t packDuMacUeDeleteReq(Pst *pst, MacUeDelete *ueDelete);
+uint8_t MacProcUeDeleteReq(Pst *pst,  MacUeDelete *ueDelete);
+uint8_t unpackMacUeDeleteReq(DuMacUeDeleteReq func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
+uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
+uint8_t unpackDuMacUeDeleteRsp(MacDuUeDeleteRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete);
+uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete);
+uint8_t unpackMacCellDeleteReq(DuMacCellDeleteReq func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
+uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
+uint8_t unpackDuMacCellDeleteRsp(MacDuCellDeleteRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
+uint8_t MacProcSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
+uint8_t unpackMacSliceCfgReq(DuMacSliceCfgReq func, Pst *pst, Buffer *mBuf);
+uint8_t DuProcMacSliceCfgRsp(Pst *pst,  MacSliceCfgRsp *cfgRsp);
+uint8_t packDuMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp);
+uint8_t unpackDuMacSliceCfgRsp(MacDuSliceCfgRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq);
+uint8_t MacProcSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq);
+uint8_t unpackMacSliceRecfgReq(DuMacSliceRecfgReq func, Pst *pst, Buffer *mBuf);
+uint8_t DuProcMacSliceRecfgRsp(Pst *pst,  MacSliceRecfgRsp *sliceRecfgRsp);
+uint8_t packDuMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *sliceRecfgRsp);
+uint8_t unpackDuMacSliceRecfgRsp(MacDuSliceRecfgRspFunc func, Pst *pst, Buffer *mBuf);
+uint8_t duHandleSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
+uint8_t packMacSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
+uint8_t unpackDuMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacDlPcchInd(Pst *pst, DlPcchInd *pcchInd);
+uint8_t MacProcDlPcchInd(Pst *pst, DlPcchInd *pcchInd);
+uint8_t unpackMacDlPcchInd(DuMacDlPcchInd func, Pst *pst, Buffer *mBuf);
+int8_t getFreeBitFromUeBitMap(uint16_t cellId);
+void unsetBitInUeBitMap(uint16_t cellId, uint8_t bitPos);
+uint8_t packDuMacUeResetReq(Pst *pst, MacUeResetReq *ueReset);
+uint8_t MacProcUeResetReq(Pst *pst,  MacUeResetReq *ueReset);
+uint8_t unpackMacUeResetReq(DuMacUeResetReq func, Pst *pst, Buffer *mBuf);
+uint8_t packDuMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp);
+uint8_t DuProcMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp);
+uint8_t unpackDuMacUeResetRsp(MacDuUeResetRspFunc func, Pst *pst, Buffer *mBuf);
 
 #endif
 
+
 /**********************************************************************
   End of file
  **********************************************************************/