Merge "[Epic-ID: ODUHIGH-462][Task-ID: ODUHIGH-472] Handling of drx timer in SCH...
[o-du/l2.git] / src / cm / mac_sch_interface.h
index 31dd8a7..0466468 100644 (file)
  *******************************************************************************/
 
 /* events */
-#define EVENT_SCH_CELL_CFG           1
-#define EVENT_SCH_CELL_CFG_CFM       2
-#define EVENT_DL_SCH_INFO            3 
-#define EVENT_UL_SCH_INFO            4 
-#define EVENT_RACH_IND_TO_SCH        5
-#define EVENT_CRC_IND_TO_SCH         6
-#define EVENT_DL_RLC_BO_INFO_TO_SCH  7
-#define EVENT_ADD_UE_CONFIG_REQ_TO_SCH   8
-#define EVENT_UE_CONFIG_RSP_TO_MAC   9
-#define EVENT_SLOT_IND_TO_SCH        10
-#define EVENT_SHORT_BSR              11
-#define EVENT_UCI_IND_TO_SCH         12
-#define EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH 13
-#define EVENT_UE_RECONFIG_RSP_TO_MAC 14
-#define EVENT_UE_DELETE_REQ_TO_SCH   15
-#define EVENT_UE_DELETE_RSP_TO_MAC   16
-#define EVENT_CELL_DELETE_REQ_TO_SCH   17
-#define EVENT_CELL_DELETE_RSP_TO_MAC   18
-
-
+#define EVENT_SCH_GEN_CFG            1
+#define EVENT_SCH_CELL_CFG           2
+#define EVENT_SCH_CELL_CFG_CFM       3
+#define EVENT_DL_SCH_INFO            4 
+#define EVENT_UL_SCH_INFO            5 
+#define EVENT_RACH_IND_TO_SCH        6
+#define EVENT_CRC_IND_TO_SCH         7
+#define EVENT_DL_RLC_BO_INFO_TO_SCH  8
+#define EVENT_ADD_UE_CONFIG_REQ_TO_SCH   9
+#define EVENT_UE_CONFIG_RSP_TO_MAC   10
+#define EVENT_SLOT_IND_TO_SCH        11
+#define EVENT_SHORT_BSR              12
+#define EVENT_UCI_IND_TO_SCH         13
+#define EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH 14
+#define EVENT_UE_RECONFIG_RSP_TO_MAC 15
+#define EVENT_UE_DELETE_REQ_TO_SCH   16
+#define EVENT_UE_DELETE_RSP_TO_MAC   17
+#define EVENT_CELL_DELETE_REQ_TO_SCH 18
+#define EVENT_CELL_DELETE_RSP_TO_MAC 19
+#define EVENT_LONG_BSR               20
+#define EVENT_SLICE_CFG_REQ_TO_SCH   21
+#define EVENT_SLICE_CFG_RSP_TO_MAC   22
+#define EVENT_SLICE_RECFG_REQ_TO_SCH 23
+#define EVENT_SLICE_RECFG_RSP_TO_MAC 24
+#define EVENT_RACH_RESOURCE_REQUEST_TO_SCH  25
+#define EVENT_RACH_RESOURCE_RESPONSE_TO_MAC 26
+#define EVENT_RACH_RESOURCE_RELEASE_TO_SCH  27
+#define EVENT_PAGING_IND_TO_SCH      28
+#define EVENT_DL_PAGING_ALLOC        29
+#define EVENT_DL_REL_HQ_PROC         30 
+#define EVENT_DL_HARQ_IND_TO_SCH     31
 /*macros*/
-#define NO_SSB 0
-#define SSB_TRANSMISSION 1
-#define SSB_REPEAT 2
 #define MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
 #define SCH_SSB_MASK_SIZE   1
 
-#define NO_SIB1 0
-#define SIB1_TRANSMISSION 1
-#define SIB1_REPITITION 2
-
 #define MAX_NUM_PRG     1 /* max value should be later 275 */
 #define MAX_DIG_BF_INTERFACES 0 /* max value should be later 255 */
 #define MAX_CODEWORDS  1  /* max should be 2 */
 #define MAX_NUMBER_OF_CRC_IND_BITS 1
 #define MAX_NUMBER_OF_UCI_IND_BITS 1
 #define MAX_SR_BITS_IN_BYTES       1
+#define MAX_HARQ_BITS_IN_BYTES     1
 #define MAX_NUM_LOGICAL_CHANNEL_GROUPS 8
-/* can we have a common numslot numscs between mac sch */
-#ifdef NR_TDD
-#define MAX_SLOTS 20
-#else
-#define MAX_SLOTS 10
-#endif
-#define MAX_SFN   1024
 #define MAX_NUM_SR_CFG_PER_CELL_GRP 8   /* Max number of scheduling request config per cell group */
 #define MAX_NUM_TAGS 4                  /* Max number of timing advance groups */
 #define MAX_NUM_BWP  4                  /* Max number of BWP per serving cell */
 #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
-#define SD_SIZE   3
+#define QPSK_MODULATION 2
 
 #define RAR_PAYLOAD_SIZE 10             /* As per spec 38.321, sections 6.1.5 and 6.2.3, RAR PDU is 8 bytes long and 2 bytes of padding */
 #define TX_PAYLOAD_HDR_LEN 32           /* Intel L1 requires adding a 32 byte header to transmitted payload */
+#define UL_TX_BUFFER_SIZE 5
 
 #define MAX_NUM_CONFIG_SLOTS 160  /*Max number of slots as per the numerology*/
 #define MAX_NUM_K0_IDX 16 /* Max number of pdsch time domain downlink allocation */
 #define MAX_NUM_K1_IDX 8  /* As per spec 38.213 section 9.2.3 Max number of PDSCH-to-HARQ resource indication */
 #define MIN_NUM_K1_IDX 4  /* Min K1 values */
-#define DEFAULT_K0_VALUE 0 /*As per 38.331, PDSCH-TimeDomainResourceAllocation field descriptions*/
-
-#define ADD_DELTA_TO_TIME(crntTime, toFill, incr)          \
+#define MAX_NUM_K2_IDX 16 /* PUSCH time domain UL resource allocation list */
+#define DEFAULT_K0_VALUE 0 /* As per 38.331, PDSCH-TimeDomainResourceAllocation field descriptions */
+/* As per 38.331, PUSCH-TimeDomainResourceAllocationList field descriptions */
+#define DEFAULT_K2_VALUE_FOR_SCS15  1 
+#define DEFAULT_K2_VALUE_FOR_SCS30  1 
+#define DEFAULT_K2_VALUE_FOR_SCS60  2
+#define DEFAULT_K2_VALUE_FOR_SCS120 3 
+
+#define ADD_DELTA_TO_TIME(crntTime, toFill, incr, numOfSlot)          \
 {                                                          \
-   if ((crntTime.slot + incr) > (MAX_SLOTS - 1))           \
+   if ((crntTime.slot + incr) > (numOfSlot - 1))           \
    {                                                       \
       toFill.sfn = (crntTime.sfn + 1);                     \
    }                                                       \
    {                                                       \
       toFill.sfn = crntTime.sfn;                           \
    }                                                       \
-   toFill.slot = (crntTime.slot + incr) % MAX_SLOTS;       \
+   toFill.slot = (crntTime.slot + incr) % numOfSlot;       \
    if (toFill.sfn >= MAX_SFN)                              \
    {                                                       \
       toFill.sfn%=MAX_SFN;                                 \
    }                                                       \
 }
 
+typedef enum
+{
+   PRB_RSRC,
+   DRB_RSRC,
+   RRC_CONNECTED_USERS_RSRC
+}SchResourceType;
+
+typedef enum
+{
+   SLICE_FOUND,
+   SLICE_NOT_FOUND
+}RspCause;
+
+typedef enum
+{
+   NO_TRANSMISSION,
+   NEW_TRANSMISSION,
+   REPEATITION 
+}PduTxOccsaion;
+
 typedef enum
 {
    UNSPECIFIED_CAUSE,
@@ -142,7 +167,7 @@ typedef enum
 {
    NOT_APPLICABLE,
    INVALID_CELLID,
-   INVALID_UEIDX
+   INVALID_UEID
 }ErrorCause;
 
 typedef enum
@@ -395,6 +420,21 @@ typedef enum
    SCH_MCS_TABLE_QAM_64_LOW_SE
 }SchMcsTable;
 
+typedef enum
+{
+   NONE,
+   PDCCH_PDU,
+   PDSCH_PDU,
+   BOTH
+}DlPduType;
+
+typedef enum
+{
+   DATA_TRANSMISSION_ALLOWED,
+   STOP_DATA_TRANSMISSION,
+   RESTART_DATA_TRANSMISSION
+}SchDataTransmission;
+
 /*structures*/
 typedef struct timeDomainAlloc
 {
@@ -417,6 +457,10 @@ typedef struct
    SchSSBPeriod   ssbPeriod;        /* SSB Periodicity in msec */
    uint8_t     ssbSubcOffset;    /* Subcarrier Offset(Kssb) */
    uint32_t    nSSBMask[SCH_SSB_MASK_SIZE];      /* Bitmap for actually transmitted SSB. */
+   
+   /*Ref:Spec 38.331 "ssb-PositionsInBurst", Value 0 in Bitmap => corresponding SS/PBCH block is not transmitted
+    *value 1 => corresponding SS/PBCH block is transmitted*/
+   uint8_t     totNumSsb;       /*S = Total Number of Actual SSB transmitted*/
 }SchSsbCfg;
 
 typedef struct bwpCfg
@@ -550,6 +594,13 @@ typedef struct pdcchCfg
 } PdcchCfg;
 /* end of SIB1 PDCCH structures */
 
+typedef struct pageCfg
+{
+   uint8_t  numPO;                    /*Derived from Ns*/
+   bool     poPresent;                /*FirstPDCCH-MonitoringPO is present or not*/
+   uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/
+}PageCfg;
+
 typedef struct
 {
    /* parameters recieved from DU-APP */
@@ -560,10 +611,11 @@ typedef struct
    uint16_t sib1Mcs;
 
    /* parameters derived in scheduler */
-   uint8_t n0;
-   BwpCfg bwp;
-   PdcchCfg sib1PdcchCfg;
-   PdschCfg sib1PdschCfg;
+   uint8_t   n0;
+   BwpCfg    bwp;
+   PdcchCfg  sib1PdcchCfg;
+   PdschCfg  sib1PdschCfg;
+   PageCfg   pageCfg;         /*Config of Paging*/
 }SchSib1Cfg;
 
 typedef struct schRachCfg
@@ -576,11 +628,14 @@ typedef struct schRachCfg
    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      totalNumRaPreamble; /* Total number of RA preambles */
    uint8_t      ssbPerRach;        /* SSB per RACH occassion */
+   uint8_t      numCbPreamblePerSsb; /* Number of CB preamble per SSB */
    uint8_t      prachMultCarrBand; /* Presence of Multiple carriers in Band */
    uint8_t      raContResTmr;      /* RA Contention Resoultion Timer */
    uint8_t      rsrpThreshSsb;     /* RSRP Threshold SSB */
    uint8_t      raRspWindow;       /* RA Response Window */
+   uint8_t      maxMsg3Tx;         /* MAximum num of msg3 tx*/
 }SchRachCfg;
 
 typedef struct schBwpParams
@@ -601,8 +656,9 @@ typedef struct schCandidatesInfo
 
 typedef struct schSearchSpaceCfg
 {
-   uint8_t searchSpaceId;
-   uint8_t coresetId;
+   uint8_t  searchSpaceId;
+   uint8_t  coresetId;
+   uint8_t  freqDomainRsrc[FREQ_DOM_RSRC_SIZE];  /* Frequency domain resource */
    uint16_t monitoringSlot;
    uint16_t duration;
    uint16_t monitoringSymbol;
@@ -682,13 +738,81 @@ typedef struct schBwpDlCfg
    SchK0K1TimingInfoTbl k0K1InfoTbl;
 }SchBwpDlCfg;
 
+typedef struct schK2TimingInfo
+{
+   uint8_t numK2; 
+   uint8_t k2Indexes[MAX_NUM_K2_IDX]; 
+}SchK2TimingInfo;
+
+typedef struct schK2TimingInfoTbl
+{
+   uint16_t tblSize; 
+   SchK2TimingInfo k2TimingInfo[MAX_NUM_CONFIG_SLOTS]; 
+}SchK2TimingInfoTbl;
+
 typedef struct schBwpUlCfg
 {
    SchBwpParams   bwp;
    SchPucchCfgCmn pucchCommon;
    SchPuschCfgCmn puschCommon;
+   SchK2TimingInfoTbl msg3K2InfoTbl;
+   SchK2TimingInfoTbl k2InfoTbl;
 }SchBwpUlCfg;
 
+typedef struct schPlmnInfoList
+{
+   Plmn           plmn;
+   uint8_t        numSliceSupport; /* Total slice supporting */
+   Snssai         **snssai;         /* List of supporting snssai*/
+}SchPlmnInfoList;
+
+typedef struct schHqCfgParam
+{
+   uint8_t maxDlDataHqTx;
+   uint8_t maxMsg4HqTx;
+   uint8_t maxUlDataHqTx;
+}SchHqCfg;
+
+#ifdef NR_DRX
+/* The following list of structures is taken from the DRX-Config section of specification 33.331. */
+
+typedef struct schDrxOnDurationTimer
+{
+   bool     onDurationTimerValInMs;
+   union
+   {
+      uint8_t  subMilliSeconds;
+      uint16_t milliSeconds;
+   }onDurationtimerValue;
+}SchDrxOnDurationTimer;
+
+typedef struct schDrxLongCycleStartOffset
+{
+   uint16_t drxLongCycleStartOffsetChoice;
+   uint16_t drxLongCycleStartOffsetVal;
+}SchDrxLongCycleStartOffset;
+
+typedef struct schShortDrx
+{
+   uint16_t   drxShortCycle;
+   uint8_t    drxShortCycleTimer;
+}SchShortDrx;
+
+typedef struct schDrxCfg
+{
+   SchDrxOnDurationTimer       drxOnDurationTimer;
+   uint16_t                    drxInactivityTimer;
+   uint8_t                     drxHarqRttTimerDl;
+   uint8_t                     drxHarqRttTimerUl;
+   uint16_t                    drxRetransmissionTimerDl;
+   uint16_t                    drxRetransmissionTimerUl;
+   SchDrxLongCycleStartOffset  drxLongCycleStartOffset;
+   bool                        shortDrxPres;
+   SchShortDrx                 shortDrx;
+   uint8_t                     drxSlotOffset;
+}SchDrxCfg;
+#endif
+
 typedef struct schCellCfg
 {
    uint16_t       cellId;           /* Cell Id */
@@ -703,15 +827,18 @@ typedef struct schCellCfg
    SchRachCfg     schRachCfg;       /* PRACH config */
    SchBwpDlCfg    schInitialDlBwp;  /* Initial DL BWP */
    SchBwpUlCfg    schInitialUlBwp;  /* Initial UL BWP */
+   SchPlmnInfoList plmnInfoList;     /* Consits of PlmnId and Snssai list */
+   SchHqCfg       schHqCfg;
 #ifdef NR_TDD
    TDDCfg         tddCfg;           /* TDD Cfg */ 
-#endif
+#endif 
 }SchCellCfg;
 
 typedef struct schCellCfgCfm
 {
    uint16_t         cellId;     /* Cell Id */
-   SchMacRsp   rsp;   
+   SchMacRsp        rsp;   
+   SchFailureCause  cause;
 }SchCellCfgCfm;
 
 typedef struct ssbInfo
@@ -754,12 +881,23 @@ typedef struct dlBrdcstAlloc
    Sib1AllocInfo sib1Alloc;
 }DlBrdcstAlloc;
 
+typedef struct msg3UlGrant
+{
+   uint8_t         freqHopFlag;
+   uint16_t        bwpSize;
+   FreqDomainAlloc msg3FreqAlloc;
+   uint8_t         k2Index;
+   uint8_t         mcs;
+   uint8_t         tpc;
+   uint8_t         csiReq;
+}Msg3UlGrant;
+
 typedef struct rarInfo
 {
    uint16_t        raRnti;
    uint8_t         RAPID;
    uint16_t        ta;
-   FreqDomainAlloc msg3FreqAlloc;
+   Msg3UlGrant     ulGrant;
    uint16_t        tcrnti;
    uint8_t         rarPdu[RAR_PAYLOAD_SIZE];
    uint8_t         rarPduLen;
@@ -767,6 +905,8 @@ typedef struct rarInfo
 
 typedef struct rarAlloc
 {
+   DlPduType  pduPres;
+   uint8_t    pdschSlot;
    RarInfo rarInfo;
    BwpCfg  bwp;
    PdcchCfg rarPdcchCfg;
@@ -794,15 +934,24 @@ typedef struct lcSchInfo
    uint32_t  schBytes; /* Number of scheduled bytes */
 }LcSchInfo;
 
-typedef struct dlMsgAlloc
+typedef struct dlMsgSchedInfo
 {
-   uint16_t   crnti;
+   bool       isRetx;
    uint8_t    numLc;
    LcSchInfo  lcSchInfo[MAX_NUM_LC]; /* Scheduled LC info */
    BwpCfg     bwp;
    PdcchCfg   dlMsgPdcchCfg;
    PdschCfg   dlMsgPdschCfg;
+   DlPduType  pduPres;
+   uint8_t    pdschSlot;
    DlMsgInfo  dlMsgInfo;
+}DlMsgSchInfo;
+
+typedef struct dlMsgAlloc
+{
+   uint16_t     crnti;
+   uint8_t      numSchedInfo;
+   DlMsgSchInfo dlMsgSchedInfo[2];
 }DlMsgAlloc;
 
 typedef struct schSlotValue
@@ -877,20 +1026,30 @@ typedef struct dlSchedInfo
    DlBrdcstAlloc brdcstAlloc;
 
    /* Allocation for RAR message */
-   //uint8_t isRarPres;
-   RarAlloc *rarAlloc;
-
-   /* Allocation from MSG4 */
-   //Msg4Alloc *msg4Alloc;
+   RarAlloc *rarAlloc[MAX_NUM_UE];
 
    /* UL grant in response to BSR */
    DciInfo    *ulGrant;
 
    /* Allocation from dedicated DL msg */
-   DlMsgAlloc *dlMsgAlloc;
+   DlMsgAlloc *dlMsgAlloc[MAX_NUM_UE];
 
 }DlSchedInfo;
 
+typedef struct dlPageAlloc
+{
+   uint16_t       cellId;
+   SlotTimingInfo dlPageTime;
+   uint8_t        ssbIdx;
+   bool           shortMsgInd;
+   uint8_t        shortMsg;
+   BwpCfg         bwp;
+   PdcchCfg       pagePdcchCfg;
+   PdschCfg       pagePdschCfg;
+   uint16_t       dlPagePduLen;
+   uint8_t        *dlPagePdu;
+}DlPageAlloc;
+
 typedef struct tbInfo
 {
    uint8_t  qamOrder;  /* Modulation Order */
@@ -1042,6 +1201,10 @@ typedef struct schMacCellGrpCfg
    SchSchedReqCfg   schedReqCfg;
    SchTagCfg        tagCfg;
    SchPhrCfg        phrCfg;             /* To be used only if phrCfgSetupPres is true */      
+#ifdef NR_DRX
+   bool             drxCfgPresent;
+   SchDrxCfg        drxCfg;          /* Drx configuration */
+#endif
 }SchMacCellGrpCfg;
 
 /* Physical Cell Group Configuration */
@@ -1140,6 +1303,7 @@ typedef struct schInitalDlBwp
    SchPdcchConfig   pdcchCfg;
    bool             pdschCfgPres;
    SchPdschConfig   pdschCfg;
+   bool             k0K1TblPrsnt;
    SchK0K1TimingInfoTbl k0K1InfoTbl;
 }SchInitalDlBwp;
 
@@ -1352,6 +1516,8 @@ typedef struct schInitialUlBwp
    SchPucchCfg   pucchCfg;
    bool          puschCfgPres;
    SchPuschCfg   puschCfg;
+   bool          k2TblPrsnt;
+   SchK2TimingInfoTbl k2InfoTbl;
 }SchInitialUlBwp;
 
 /* Uplink BWP information */
@@ -1426,12 +1592,6 @@ typedef struct schDrbQos
    uint32_t                ulPduSessAggMaxBitRate;   /* UL PDU Session Aggregate max bit rate */
 }SchDrbQosInfo;
 
-typedef struct schSnssai
-{
-   uint8_t   sst;
-   uint8_t   sd[SD_SIZE];
-}SchSnssai;
-
 /* Special cell configuration */
 typedef struct schSpCellCfg
 {
@@ -1461,7 +1621,7 @@ typedef struct schLcCfg
    ConfigType     configType;
    uint8_t        lcId;
    SchDrbQosInfo  *drbQos;
-   SchSnssai      *snssai;
+   Snssai         *snssai;
    SchDlLcCfg     dlLcCfg;
    SchUlLcCfg     ulLcCfg;
 }SchLcCfg;
@@ -1483,6 +1643,7 @@ typedef struct schModulationInfo
 typedef struct schUeCfg
 {
    uint16_t        cellId;
+   uint8_t         ueId;
    uint16_t        crnti;
    bool macCellGrpCfgPres;
    SchMacCellGrpCfg   macCellGrpCfg;
@@ -1495,17 +1656,58 @@ typedef struct schUeCfg
    SchModulationInfo  ulModInfo;
    uint8_t            numLcs;
    SchLcCfg           schLcCfg[MAX_NUM_LC];
+   SchDataTransmission dataTransmissionInfo;
+#ifdef NR_DRX   
+   bool     drxConfigIndicatorRelease;
+#endif
 }SchUeCfg;
 
 typedef struct schUeCfgRsp
 {
-   uint16_t   ueIdx;
    uint16_t   cellId;
+   uint16_t   ueId;
    uint16_t   crnti;
    SchMacRsp  rsp;
    SchFailureCause cause;
 }SchUeCfgRsp;
 
+typedef struct schRachRsrcReq
+{
+   SlotTimingInfo slotInd;
+   uint16_t       cellId;
+   uint16_t       crnti;
+   uint8_t        numSsb;
+   uint8_t        ssbIdx[MAX_NUM_SSB];
+}SchRachRsrcReq;
+
+typedef struct schCfraSsbResource
+{
+   uint8_t  ssbIdx;
+   uint8_t  raPreambleIdx;
+}SchCfraSsbResource;
+
+typedef struct schCfraRsrc
+{
+   uint8_t   numSsb;
+   SchCfraSsbResource ssbResource[MAX_NUM_SSB];
+}SchCfraResource;
+
+typedef struct schRachRsrcRsp
+{
+   uint16_t   cellId;
+   uint16_t   crnti;
+   SchMacRsp  result;
+   SchCfraResource  cfraResource;
+}SchRachRsrcRsp;
+
+typedef struct schRachRsrcRel
+{
+   SlotTimingInfo slotInd;
+   uint16_t   cellId;
+   uint16_t   crnti;
+   SchCfraResource  cfraResource;
+}SchRachRsrcRel;
+
 typedef struct schUeDelete
 {
    uint16_t   cellId;
@@ -1520,16 +1722,17 @@ typedef struct schUeDeleteRsp
    ErrorCause cause;
 }SchUeDeleteRsp;
 
-typedef struct schCellDelete 
+typedef struct schCellDeleteReq 
 {
    uint16_t   cellId;
-}SchCellDelete;
+}SchCellDeleteReq;
 
 
 typedef struct schCellDeleteRsp
 {
-   uint16_t   cellId;
-   SchMacRsp  rsp;
+   uint16_t        cellId;
+   SchMacRsp       rsp;
+   SchFailureCause cause;
 }SchCellDeleteRsp;
 
 typedef struct dataVolInfo
@@ -1556,8 +1759,74 @@ typedef struct srUciIndInfo
    uint8_t     srPayload[MAX_SR_BITS_IN_BYTES];
 }SrUciIndInfo;
 
-/* function pointers */
+typedef struct dlHarqInd
+{
+   uint16_t    cellId;
+   uint16_t    crnti;
+   SlotTimingInfo slotInd;
+   uint8_t     numHarq;
+   uint8_t     harqPayload[MAX_HARQ_BITS_IN_BYTES];
+}DlHarqInd;
+
+typedef struct schRrmPolicyRatio
+{
+   uint8_t policyMaxRatio;
+   uint8_t policyMinRatio;
+   uint8_t policyDedicatedRatio;
+}SchRrmPolicyRatio;
+
+typedef struct schRrmPolicyOfSlice
+{
+   Snssai  snssai;
+   SchRrmPolicyRatio *rrmPolicyRatioInfo;
+}SchRrmPolicyOfSlice;
+
+typedef struct schSliceCfgReq
+{
+   uint8_t  numOfConfiguredSlice;
+   SchRrmPolicyOfSlice **listOfConfirguration;
+}SchSliceCfgReq;
+
+typedef struct sliceRsp
+{
+   Snssai     snssai;
+   SchMacRsp  rsp;
+   RspCause   cause;
+}SliceRsp;
+
+typedef struct schSliceCfgRsp
+{
+   uint8_t    numSliceCfgRsp;
+   SliceRsp   **listOfSliceCfgRsp;
+}SchSliceCfgRsp;
+
+/*As per ORAN-WG8, Slice Cfg and ReCfg are same structures*/
+typedef struct schSliceCfgReq SchSliceRecfgReq;
+typedef struct schSliceCfgRsp SchSliceRecfgRsp;
+
+typedef struct schPageInd
+{
+   uint16_t  cellId;
+   uint16_t  pf;
+   uint8_t   i_s;
+   uint16_t  pduLen;
+   uint8_t  *pagePdu;
+}SchPageInd;
+
+typedef struct schUeHqInfo
+{
+   uint16_t  crnti;
+   uint8_t   hqProcId;
+}SchUeHqInfo;
 
+typedef struct schRlsHqInfo
+{
+   uint16_t     cellId;
+   uint8_t      numUes;
+   SchUeHqInfo  *ueHqInfo;
+}SchRlsHqInfo;
+
+/* function pointers */
 typedef uint8_t (*SchCellCfgCfmFunc)    ARGS((
         Pst            *pst,           /* Post Structure */                         
         SchCellCfgCfm  *schCellCfgCfm  /* Cell Cfg Cfm */
@@ -1573,6 +1842,11 @@ typedef uint8_t (*SchMacDlAllocFunc)     ARGS((
         DlSchedInfo    *dlSchedInfo   /* dl allocation Info */                      
         ));
 
+typedef uint8_t (*SchMacDlPageAllocFunc)     ARGS(( 
+         Pst            *pst,          /* Post Structure */
+         DlPageAlloc *dlPageAlloc      /* dl Page allocation Info */
+         ));
+
 typedef uint8_t (*SchMacUlSchInfoFunc)     ARGS((                     
         Pst         *pst,           /* Post Structure */                         
         UlSchedInfo *ulSchedInfo    /* UL Alloc Sch  Info */                      
@@ -1607,6 +1881,10 @@ typedef uint8_t (*MacSchBsrFunc)       ARGS((
    UlBufferStatusRptInd *bsrInd
 ));
 
+typedef uint8_t (*MacSchDlHarqIndFunc) ARGS((
+        Pst         *pst,         /* Post structure */
+        DlHarqInd  *dlHarqInd));  /* Dl HARQ IND Info */
+
 typedef uint8_t (*MacSchSrUciIndFunc) ARGS(( 
         Pst         *pst,         /* Post structure */
         SrUciIndInfo  *uciInd));    /* UCI IND Info */
@@ -1619,6 +1897,18 @@ typedef uint8_t (*SchUeReCfgRspFunc) ARGS((
         Pst         *pst,           /* Post structure */
         SchUeCfgRsp *cfgRsp));       /* Scheduler UE Cfg response */
 
+typedef uint8_t (*MacSchRachRsrcReqFunc) ARGS((
+    Pst         *pst,                    /* Post structure */
+    SchRachRsrcReq *schRachRsrcReq));    /* RACH resource request to SCH */
+
+typedef uint8_t (*SchRachRsrcRspFunc) ARGS((
+   Pst            *pst,                 /* Post structure */
+   SchRachRsrcRsp *schRachRsrcRsp));    /* RACH resource request to MAC */
+
+typedef uint8_t (*MacSchRachRsrcRelFunc) ARGS((
+   Pst         *pst,                    /* Post structure */
+   SchRachRsrcRel *schRachRsrcRel));    /* RACH resource release to SCH */
+
 typedef uint8_t (*MacSchUeDeleteReqFunc) ARGS((
    Pst         *pst,           /* Post structure */
    SchUeDelete *schUeDel)); /*Scheduler UE Del*/
@@ -1629,12 +1919,38 @@ typedef uint8_t (*SchUeDeleteRspFunc) ARGS((
 
 typedef uint8_t (*MacSchCellDeleteReqFunc) ARGS((
    Pst         *pst,           /* Post structure */
-   SchCellDelete *schCellDelete)); /*Scheduler UE Del*/
+   SchCellDeleteReq *schCellDelete)); /*Scheduler UE Del*/
 
 typedef uint8_t (*SchCellDeleteRspFunc) ARGS((
    Pst          *pst,           /* Post structure */
    SchCellDeleteRsp *schCellDeleteRsp));       /* Scheduler UE delete response */
 
+typedef uint8_t (*MacSchSliceCfgReqFunc) ARGS((
+   Pst          *pst,           /* Post structure */
+   SchSliceCfgReq *schSliceCfgReq));  /* Scheduler Slice Cfg Req */
+
+typedef uint8_t (*SchSliceCfgRspFunc)    ARGS((
+        Pst            *pst,            /* Post Structure */                         
+        SchSliceCfgRsp  *schSliceCfgRsp /* Cell Cfg Cfm */
+        ));
+
+typedef uint8_t (*MacSchSliceRecfgReqFunc) ARGS((
+   Pst          *pst,           /* Post structure */
+   SchSliceRecfgReq *schSliceRecfgReq));  /* Scheduler Slice ReCfg Req */
+
+typedef uint8_t (*SchSliceRecfgRspFunc)    ARGS((
+        Pst            *pst,            /* Post Structure */                         
+        SchSliceRecfgRsp  *schSliceRecfgRsp /* Cell ReCfg Cfm */
+        ));
+
+typedef uint8_t (*MacSchPagingIndFunc) ARGS((
+   Pst         *pst,           /* Post structure */
+   SchPageInd *schPagingInd)); /* Paging Indication */
+
+typedef uint8_t (*SchMacDlReleaseHarqFunc) ARGS((
+   Pst         *pst,           /* Post structure */
+   SchRlsHqInfo *rlsHqInfo)); /* Release Harq proc */
+
 /* function declarations */
 uint8_t packMacSchSlotInd(Pst *pst, SlotTimingInfo *slotInd);
 uint8_t packSchMacDlAlloc(Pst *pst, DlSchedInfo  *dlSchedInfo);
@@ -1663,20 +1979,41 @@ uint8_t unpackMacSchSlotInd(MacSchSlotIndFunc func, Pst *pst, Buffer  *mBuf);
 uint8_t packMacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd);
 uint8_t MacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd);
 uint8_t packMacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd);
+uint8_t packMacSchDlHarqInd(Pst *pst, DlHarqInd *dlHarqInd);
+uint8_t MacSchDlHarqInd(Pst *pst, DlHarqInd *dlHarqInd);
 uint8_t MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd);
 uint8_t packMacSchModUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
 uint8_t MacSchModUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
 uint8_t packSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
 uint8_t MacProcSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
+uint8_t packMacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
+uint8_t MacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
+uint8_t packSchRachRsrcRsp(Pst *pst, SchRachRsrcRsp *schRachRsrcRsp);
+uint8_t MacProcSchRachRsrcRsp(Pst *pst, SchRachRsrcRsp *schRachRsrcRsp);
+uint8_t packMacSchRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel);
+uint8_t MacSchRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel);
 uint8_t packMacSchUeDeleteReq(Pst *pst,  SchUeDelete *schUeDel);
 uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete  *ueDelete);
 uint8_t packSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp  *delRsp);
 uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp);
-uint8_t packMacSchCellDeleteReq(Pst *pst,  SchCellDelete *schCellDelete);
-uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDelete  *schCellDelete);
+uint8_t packMacSchCellDeleteReq(Pst *pst,  SchCellDeleteReq *schCellDelete);
+uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDeleteReq  *schCellDelete);
 uint8_t packSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp  *schCellDeleteRsp);
 uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDeleteRsp);
-
+uint8_t packMacSchSliceCfgReq(Pst *pst, SchSliceCfgReq *cfgReq);
+uint8_t MacSchSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq);
+uint8_t packSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t packMacSchSliceRecfgReq(Pst *pst, SchSliceRecfgReq *recfgReq);
+uint8_t MacSchSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq);
+uint8_t packSchSliceRecfgRsp(Pst *pst, SchSliceRecfgRsp *schSliceRecfgRsp);
+uint8_t MacProcSchSliceRecfgRsp(Pst *pst, SchSliceRecfgRsp *sliceRecfgrsp);
+uint8_t packMacSchPagingInd(Pst *pst,  SchPageInd *pageInd);
+uint8_t MacSchPagingInd(Pst *pst,  SchPageInd *pageInd);
+uint8_t packSchMacDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc);
+uint8_t MacProcDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc);
+uint8_t packSchMacDlReleaseHarq(Pst *pst, SchRlsHqInfo *rlsHqInfo);
+uint8_t MacSchReleaseDlHarqProc(Pst *pst, SchRlsHqInfo *rlsHqInfo);
 /**********************************************************************
   End of file
  **********************************************************************/