[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-423]UE context creation at MAC/SCH in Target DU
[o-du/l2.git] / src / cm / mac_sch_interface.h
index 2783f0e..9bea28b 100644 (file)
  *******************************************************************************/
 
 /* events */
-#define EVENT_SCH_CELL_CFG           1
-#define EVENT_SCH_CELL_CFG_CFM       2
-#define EVENT_DL_ALLOC               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_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_UE_RECONFIG_REQ_TO_SCH 13
-#define EVENT_UE_RECONFIG_RSP_TO_MAC 14
-
+#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
 
 /*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_SR_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_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
+/* 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
+#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 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)          \
 {                                                          \
    }                                                       \
 }
 
+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,
@@ -113,6 +163,13 @@ typedef enum
    SR_PROHIBIT_MS128
 }SchSrProhibitTimer;
 
+typedef enum
+{
+   NOT_APPLICABLE,
+   INVALID_CELLID,
+   INVALID_UEID
+}ErrorCause;
+
 typedef enum
 {
    SR_TRANS_MAX_N4,
@@ -356,6 +413,21 @@ typedef enum
    FORMAT1_1
 }FormatType;
 
+typedef enum
+{
+   SCH_MCS_TABLE_QAM_64,
+   SCH_MCS_TABLE_QAM_256,
+   SCH_MCS_TABLE_QAM_64_LOW_SE
+}SchMcsTable;
+
+typedef enum
+{
+   NONE,
+   PDCCH_PDU,
+   PDSCH_PDU,
+   BOTH
+}DlPduType;
+
 /*structures*/
 typedef struct timeDomainAlloc
 {
@@ -378,6 +450,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
@@ -429,7 +505,7 @@ typedef struct dmrsInfo
 typedef struct pdschFreqAlloc
 {
    uint8_t  resourceAllocType;
-   /* since we are using type-1, hence rbBitmap excluded */
+   /* since we are using type-1, rbBitmap excluded */
    FreqDomainAlloc freqAlloc;
    uint8_t  vrbPrbMapping;
 } PdschFreqAlloc;
@@ -511,21 +587,28 @@ 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 */
    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;
 
    /* 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
@@ -563,8 +646,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;
@@ -577,12 +661,18 @@ typedef struct schPdcchCfgCmn
    uint8_t raSearchSpaceId;
 }SchPdcchCfgCmn;
 
-typedef struct schPdschCfgCmn
+typedef struct schPdschCfgCmnTimeDomRsrcAlloc
 {
    uint8_t k0;
    uint8_t mappingType;
    uint8_t startSymbol;
    uint8_t lengthSymbol;
+}SchPdschCfgCmnTimeDomRsrcAlloc;
+
+typedef struct schPdschCfgCmn
+{
+   uint8_t   numTimeDomAlloc;
+   SchPdschCfgCmnTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_DL_ALLOC];
 }SchPdschCfgCmn;
 
 typedef struct schPucchCfgCmn
@@ -591,40 +681,99 @@ typedef struct schPucchCfgCmn
    uint8_t pucchGroupHopping;
 }SchPucchCfgCmn;
 
+/* PUSCH Time Domain Resource Allocation */
+typedef struct schPuschTimeDomRsrcAlloc
+{
+   uint8_t   k2;
+   SchTimeDomRsrcAllocMappingType   mappingType;
+   uint8_t   startSymbol;
+   uint8_t   symbolLength;
+}SchPuschTimeDomRsrcAlloc;
+
 typedef struct schPuschCfgCmn
 {
-   uint8_t k2;
-   uint8_t mappingType;
-   uint8_t startSymbol;
-   uint8_t lengthSymbol;
+   uint8_t                    numTimeDomRsrcAlloc;
+   SchPuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
 }SchPuschCfgCmn;
 
+typedef struct schK1TimingInfo
+{
+   uint8_t numK1;
+   uint8_t k1Indexes[MAX_NUM_K1_IDX];
+}SchK1TimingInfo;
+
+typedef struct schK0TimingInfo
+{
+   uint8_t k0Index;
+   SchK1TimingInfo k1TimingInfo;
+}SchK0TimingInfo;
+
+typedef struct schK0K1TimingInfo
+{
+   uint8_t numK0;
+   SchK0TimingInfo k0Indexes[MAX_NUM_K0_IDX];
+}SchK0K1TimingInfo;
+
+typedef struct schK0K1TimingInfoTbl
+{
+   uint16_t tblSize;
+   SchK0K1TimingInfo k0k1TimingInfo[MAX_NUM_CONFIG_SLOTS];
+}SchK0K1TimingInfoTbl;
+
 typedef struct schBwpDlCfg
 {
    SchBwpParams   bwp;
    SchPdcchCfgCmn pdcchCommon;
    SchPdschCfgCmn pdschCommon;
+   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 schCellCfg
 {
-   uint16_t    cellId;           /* Cell Id */
-   uint16_t    phyCellId;        /* Physical cell id */
-   uint8_t     bandwidth;        /* Supported B/W */
+   uint16_t       cellId;           /* Cell Id */
+   uint16_t       phyCellId;        /* Physical cell id */
+   uint8_t        numerology;       /* Supported numerology */
    SchDuplexMode  dupMode;          /* Duplex type: TDD/FDD */
-   SchSsbCfg   ssbSchCfg;        /* SSB config */
-   SchSib1Cfg  sib1SchCfg;       /* SIB1 config */
-   SchRachCfg  schRachCfg;       /* PRACH config */
-   SchBwpDlCfg schInitialDlBwp;  /* Initial DL BWP */
-   SchBwpUlCfg schInitialUlBwp;  /* Initial UL BWP */
-   uint8_t     puschMu;          /* PUSCH MU */
+   uint8_t        bandwidth;        /* Supported B/W */
+   uint32_t       dlFreq;           /* DL Frequency */
+   uint32_t       ulFreq;           /* UL Frequency */
+   SchSsbCfg      ssbSchCfg;        /* SSB config */
+   SchSib1Cfg     sib1SchCfg;       /* SIB1 config */
+   SchRachCfg     schRachCfg;       /* PRACH config */
+   SchBwpDlCfg    schInitialDlBwp;  /* Initial DL BWP */
+   SchBwpUlCfg    schInitialUlBwp;  /* Initial UL BWP */
+   SchPlmnInfoList plmnInfoList;     /* Consits of PlmnId and Snssai list */
+#ifdef NR_TDD
+   TDDCfg         tddCfg;           /* TDD Cfg */ 
+#endif  
 }SchCellCfg;
 
 typedef struct schCellCfgCfm
@@ -673,19 +822,32 @@ 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[8];
+   uint8_t         rarPdu[RAR_PAYLOAD_SIZE];
    uint8_t         rarPduLen;
 }RarInfo;
 
 typedef struct rarAlloc
 {
+   DlPduType  pduPres;
+   uint8_t    pdschSlot;
    RarInfo rarInfo;
    BwpCfg  bwp;
    PdcchCfg rarPdcchCfg;
@@ -710,27 +872,35 @@ typedef struct dlMsgInfo
 typedef struct lcSchInfo
 {
    uint8_t   lcId;
-   uint16_t  schBytes; /* Number of scheduled bytes */
+   uint32_t  schBytes; /* Number of scheduled bytes */
 }LcSchInfo;
 
-typedef struct dlMsgAlloc
+typedef struct dlMsgSchedInfo
 {
-   uint16_t   crnti;
    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
 {
-   SlotIndInfo currentTime;
-   SlotIndInfo broadcastTime;
-   SlotIndInfo rarTime;
-   SlotIndInfo dlMsgTime;
-   SlotIndInfo ulDciTime;
+   SlotTimingInfo currentTime;
+   SlotTimingInfo broadcastTime;
+   SlotTimingInfo rarTime;
+   SlotTimingInfo dlMsgTime;
+   SlotTimingInfo ulDciTime;
 }SchSlotValue;
 
 typedef struct format0_0
@@ -771,7 +941,7 @@ typedef struct dciInfo
 {
    uint16_t      cellId;   
    uint16_t      crnti;          /* CRNI */
-   SlotIndInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
+   SlotTimingInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
    BwpCfg        bwpCfg;         /* BWP Cfg */
    CoresetCfg    coresetCfg;     /* Coreset1 Cfg */
    FormatType    formatType;     /* DCI Format */
@@ -796,26 +966,24 @@ 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 tbInfo
 {
-   uint8_t  mcs;    /* MCS */
-   uint8_t  ndi;    /* NDI */
-   uint8_t  rv;     /* Redundancy Version */
-   uint16_t tbSize; /* TB Size */
+   uint8_t  qamOrder;  /* Modulation Order */
+   uint8_t  mcs;       /* MCS */
+   SchMcsTable  mcsTable;  /* MCS Table */
+   uint8_t  ndi;       /* NDI */
+   uint8_t  rv;        /* Redundancy Version */
+   uint16_t tbSize;    /* TB Size */
 }TbInfo;
 
 typedef struct schPuschInfo
@@ -831,6 +999,16 @@ typedef struct schPuschInfo
    uint8_t          dmrsAddPos;
 }SchPuschInfo;
 
+typedef struct schPucchFormatCfg
+{
+   uint8_t interSlotFreqHop;
+   uint8_t addDmrs;
+   uint8_t maxCodeRate;
+   uint8_t numSlots;
+   bool    pi2BPSK;
+   bool    harqAckCSI;
+}SchPucchFormatCfg;
+
 typedef struct schPucchInfo
 {
    uint16_t         rnti;
@@ -842,13 +1020,20 @@ typedef struct schPucchInfo
    uint8_t          numHarqBits;
    uint8_t          uciFlag;
    uint8_t          numUciBits;
+   uint8_t          intraFreqHop;
+   uint16_t         secondPrbHop;
+   uint8_t          initialCyclicShift;
+   uint8_t          occLen;
+   uint8_t          occIdx;
+   uint8_t          timeDomOCC;
+   SchPucchFormatCfg cmnFormatCfg;
 }SchPucchInfo;
 
 typedef struct ulSchedInfo
 {
    uint16_t      cellId;         /* Cell Id */
    uint16_t      crnti;          /* CRNI */
-   SlotIndInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
+   SlotTimingInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
    uint8_t       dataType;       /* Type of info being scheduled */
    PrachSchInfo  prachSchInfo;   /* Prach scheduling info */
    SchPuschInfo  schPuschInfo;   /* Pusch scheduling info */
@@ -859,7 +1044,7 @@ typedef struct rachIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo timingInfo;
+   SlotTimingInfo timingInfo;
    uint8_t     slotIdx;
    uint8_t     symbolIdx;
    uint8_t     freqIdx;
@@ -872,7 +1057,7 @@ typedef struct crcIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo timingInfo;
+   SlotTimingInfo timingInfo;
    uint16_t    numCrcInd;
    uint8_t     crcInd[MAX_NUMBER_OF_CRC_IND_BITS];
 }CrcIndInfo;
@@ -994,6 +1179,7 @@ typedef struct schPdcchConfig
 /* PDSCH time domain resource allocation */
 typedef struct schPdschTimeDomRsrcAlloc
 {
+   uint8_t    *k0;
    SchTimeDomRsrcAllocMappingType    mappingType;
    uint8_t    startSymbol;
    uint8_t    symbolLength;
@@ -1039,6 +1225,8 @@ typedef struct schInitalDlBwp
    SchPdcchConfig   pdcchCfg;
    bool             pdschCfgPres;
    SchPdschConfig   pdschCfg;
+   bool             k0K1TblPrsnt;
+   SchK0K1TimingInfoTbl k0K1InfoTbl;
 }SchInitalDlBwp;
 
 /* BWP Downlink common */
@@ -1063,9 +1251,160 @@ typedef struct schPdschServCellCfg
 }SchPdschServCellCfg;
 
 /* PUCCH Configuration */
+typedef struct schPucchResrcSetInfo
+{
+   uint8_t resrcSetId;
+   uint8_t resrcListCount;
+   uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET];
+   uint8_t maxPayLoadSize;
+}SchPucchResrcSetInfo;
+
+typedef struct schPucchResrcSetCfg
+{
+   uint8_t resrcSetToAddModListCount;
+   SchPucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET];
+   uint8_t resrcSetToRelListCount;
+   uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC];
+}SchPucchResrcSetCfg;
+
+typedef struct schPucchFormat0
+{
+   uint8_t initialCyclicShift;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+}SchPucchFormat0;
+
+typedef struct schPucchFormat1
+{
+   uint8_t initialCyclicShift;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+   uint8_t timeDomOCC;
+}SchPucchFormat1;
+
+typedef struct schPucchFormat2_3
+{
+   uint8_t numPrbs;
+   uint8_t numSymbols;
+   uint8_t startSymbolIdx;
+}SchPucchFormat2_3;
+
+typedef struct schPucchFormat4
+{
+   uint8_t numSymbols;
+   uint8_t occLen;
+   uint8_t occIdx;
+   uint8_t startSymbolIdx;
+}SchPucchFormat4;
+
+typedef struct schPucchResrcInfo
+{
+   uint8_t  resrcId;
+   uint16_t startPrb;
+   uint8_t  intraFreqHop;
+   uint16_t secondPrbHop;
+   uint8_t  pucchFormat;
+   union{
+      SchPucchFormat0   *format0; 
+      SchPucchFormat1   *format1;
+      SchPucchFormat2_3 *format2;
+      SchPucchFormat2_3 *format3;
+      SchPucchFormat4   *format4;
+   }SchPucchFormat;
+}SchPucchResrcInfo;
+
+typedef struct schPucchResrcCfg
+{
+   uint8_t resrcToAddModListCount;
+   SchPucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC];
+   uint8_t resrcToRelListCount;
+   uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC];
+}SchPucchResrcCfg;
+
+
+typedef struct schSchedReqResrcInfo
+{
+   uint8_t resrcId;
+   uint8_t requestId;
+   uint8_t periodicity;
+   uint16_t offset;
+   uint8_t resrc;
+}SchSchedReqResrcInfo;
+
+typedef struct schPucchSchedReqCfg
+{
+   uint8_t           schedAddModListCount;
+   SchSchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+   uint8_t           schedRelListCount;
+   uint8_t           schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+}SchPucchSchedReqCfg;
+
+typedef struct schSpatialRelationInfo
+{
+   uint8_t spatialRelationId;
+   uint8_t servCellIdx;
+   uint8_t pathLossRefRSId;
+   uint8_t p0PucchId;
+   uint8_t closeLoopIdx;
+}SchSpatialRelationInfo;
+
+typedef struct schPucchSpatialCfg
+{
+   uint8_t spatialAddModListCount;
+   SchSpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS];
+   uint8_t spatialRelListCount;
+   uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS];
+}SchPucchSpatialCfg;
+
+typedef struct schP0PucchCfg
+{
+   uint8_t p0PucchId;
+   int     p0PucchVal;
+}SchP0PucchCfg;
+
+typedef struct schPathLossRefRSCfg
+{
+   uint8_t pathLossRefRSId;
+}SchPathLossRefRSCfg;
+
+typedef struct schPucchMultiCsiCfg
+{
+   uint8_t  multiCsiResrcListCount;
+   uint8_t  multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1];
+}SchPucchMultiCsiCfg;
+
+typedef struct schPucchDlDataToUlAck
+{
+   uint8_t  dlDataToUlAckListCount;
+   uint8_t  dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK];
+}SchPucchDlDataToUlAck;
+
+typedef struct schPucchPowerControl
+{
+   int deltaF_Format0;
+   int deltaF_Format1;
+   int deltaF_Format2;
+   int deltaF_Format3;
+   int deltaF_Format4;
+   uint8_t p0SetCount;
+   SchP0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET];
+   uint8_t pathLossRefRSListCount;
+   SchPathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS];
+}SchPucchPowerControl;
+
 typedef struct schPucchCfg
 {
-   /* TODO : Not used currently */ 
+   SchPucchResrcSetCfg   *resrcSet;
+   SchPucchResrcCfg      *resrc;
+   SchPucchFormatCfg     *format1; 
+   SchPucchFormatCfg     *format2; 
+   SchPucchFormatCfg     *format3; 
+   SchPucchFormatCfg     *format4;
+   SchPucchSchedReqCfg   *schedReq;
+   SchPucchMultiCsiCfg   *multiCsiCfg;
+   SchPucchSpatialCfg    *spatialInfo;
+   SchPucchDlDataToUlAck *dlDataToUlAck;
+   SchPucchPowerControl  *powerControl;
 }SchPucchCfg;
 
 /* Transform precoding disabled */
@@ -1081,15 +1420,6 @@ typedef struct SchDmrsUlCfg
    SchTransPrecodDisabled     transPrecodDisabled;  /* Transform precoding disabled */
 }SchDmrsUlCfg;
 
-/* PUSCH Time Domain Resource Allocation */
-typedef struct schPuschTimeDomRsrcAlloc
-{
-   uint8_t   k2;
-   SchTimeDomRsrcAllocMappingType   mappingType;
-   uint8_t   startSymbol;
-   uint8_t   symbolLength;
-}SchPuschTimeDomRsrcAlloc;
-
 /* PUSCH Configuration */
 typedef struct schPuschCfg
 {
@@ -1108,6 +1438,8 @@ typedef struct schInitialUlBwp
    SchPucchCfg   pucchCfg;
    bool          puschCfgPres;
    SchPuschCfg   puschCfg;
+   bool          k2TblPrsnt;
+   SchK2TimingInfoTbl k2InfoTbl;
 }SchInitialUlBwp;
 
 /* Uplink BWP information */
@@ -1182,12 +1514,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
 {
@@ -1214,42 +1540,81 @@ typedef struct schDlLcCfg
 /* Logical Channel configuration */
 typedef struct schLcCfg
 {
+   ConfigType     configType;
    uint8_t        lcId;
    SchDrbQosInfo  *drbQos;
-   SchSnssai      *snssai;
+   Snssai         *snssai;
    SchDlLcCfg     dlLcCfg;
    SchUlLcCfg     ulLcCfg;
 }SchLcCfg;
 
 /* Aggregate max bit rate */
-typedef struct aggrMaxBitRate
+typedef struct schAmbrCfg
+{
+   uint32_t   ulBr;   /* Ul BitRate */
+}SchAmbrCfg;
+
+typedef struct schModulationInfo
 {
-   uint32_t   ulBitRate;
-   uint32_t   dlBitRate;
-}SchAggrMaxBitRate;
+   uint8_t      modOrder;
+   uint8_t      mcsIndex;
+   SchMcsTable  mcsTable;
+}SchModulationInfo;
 
 /* UE configuration */
 typedef struct schUeCfg
 {
    uint16_t        cellId;
+   uint8_t         duUeF1apId;
    uint16_t        crnti;
+   bool macCellGrpCfgPres;
    SchMacCellGrpCfg   macCellGrpCfg;
+   bool phyCellGrpCfgPres;
    SchPhyCellGrpCfg   phyCellGrpCfg;
+   bool spCellCfgPres;
    SchSpCellCfg       spCellCfg;
-   SchAggrMaxBitRate  *aggrMaxBitRate;
-   uint8_t            numLc;
-   SchLcCfg           lcCfgList[MAX_NUM_LC];
+   SchAmbrCfg         *ambrCfg;
+   SchModulationInfo  dlModInfo;
+   SchModulationInfo  ulModInfo;
+   uint8_t            numLcs;
+   SchLcCfg           schLcCfg[MAX_NUM_LC];
 }SchUeCfg;
 
 typedef struct schUeCfgRsp
 {
-   uint16_t   ueIdx;
    uint16_t   cellId;
+   uint16_t   duUeF1apId;
    uint16_t   crnti;
    SchMacRsp  rsp;
    SchFailureCause cause;
 }SchUeCfgRsp;
 
+typedef struct schUeDelete
+{
+   uint16_t   cellId;
+   uint16_t   crnti;
+}SchUeDelete;
+
+typedef struct schUeDeleteRsp
+{
+   uint16_t   cellId;
+   uint16_t   crnti;
+   SchMacRsp  rsp;
+   ErrorCause cause;
+}SchUeDeleteRsp;
+
+typedef struct schCellDelete 
+{
+   uint16_t   cellId;
+}SchCellDelete;
+
+
+typedef struct schCellDeleteRsp
+{
+   uint16_t   cellId;
+   SchMacRsp  rsp;
+}SchCellDeleteRsp;
+
 typedef struct dataVolInfo
 {
    uint8_t  lcgId;
@@ -1269,13 +1634,44 @@ typedef struct srUciIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo slotInd;
+   SlotTimingInfo slotInd;
    uint8_t     numSrBits;
    uint8_t     srPayload[MAX_SR_BITS_IN_BYTES];
 }SrUciIndInfo;
 
-/* function pointers */
+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 schSliceRsp
+{
+   uint8_t    numSliceCfgRsp;
+   SliceRsp   **listOfSliceCfgRsp;
+}SchSliceCfgRsp;
+
+/* function pointers */
 typedef uint8_t (*SchCellCfgCfmFunc)    ARGS((
         Pst            *pst,           /* Post Structure */                         
         SchCellCfgCfm  *schCellCfgCfm  /* Cell Cfg Cfm */
@@ -1308,7 +1704,7 @@ typedef uint8_t (*MacSchDlRlcBoInfoFunc) ARGS((
         Pst         *pst,         /* Post structure */
         DlRlcBoInfo *dlBoInfo));   /* DL BO Info */
 
-typedef uint8_t (*MacSchUeCreateReqFunc) ARGS((
+typedef uint8_t (*MacSchAddUeConfigReqFunc) ARGS((
         Pst         *pst,           /* Post structure */
         SchUeCfg    *ueCfgToSch));   /* Scheduler UE Cfg */
 
@@ -1318,7 +1714,7 @@ typedef uint8_t (*SchUeCfgRspFunc) ARGS((
 
 typedef uint8_t (*MacSchSlotIndFunc) ARGS((
          Pst         *pst,          /* Post structure */
-        SlotIndInfo *slotInd));    /* Slot Info */
+        SlotTimingInfo *slotInd));    /* Slot Info */
 
 typedef uint8_t (*MacSchBsrFunc)       ARGS((
    Pst                  *pst,
@@ -1329,7 +1725,7 @@ typedef uint8_t (*MacSchSrUciIndFunc) ARGS((
         Pst         *pst,         /* Post structure */
         SrUciIndInfo  *uciInd));    /* UCI IND Info */
 
-typedef uint8_t (*MacSchUeReconfigReqFunc) ARGS((
+typedef uint8_t (*MacSchModUeConfigReqFunc) ARGS((
         Pst         *pst,           /* Post structure */
         SchUeCfg    *ueCfgToSch));   /* Scheduler UE Cfg */
 
@@ -1337,8 +1733,41 @@ typedef uint8_t (*SchUeReCfgRspFunc) ARGS((
         Pst         *pst,           /* Post structure */
         SchUeCfgRsp *cfgRsp));       /* Scheduler UE Cfg response */
 
+typedef uint8_t (*MacSchUeDeleteReqFunc) ARGS((
+   Pst         *pst,           /* Post structure */
+   SchUeDelete *schUeDel)); /*Scheduler UE Del*/
+
+typedef uint8_t (*SchUeDeleteRspFunc) ARGS((
+   Pst          *pst,           /* Post structure */
+   SchUeDeleteRsp *delRsp));       /* Scheduler UE delete response */
+
+typedef uint8_t (*MacSchCellDeleteReqFunc) ARGS((
+   Pst         *pst,           /* Post structure */
+   SchCellDelete *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 */
+   SchSliceCfgReq *schSliceReCfgReq));  /* Scheduler Slice ReCfg Req */
+
+typedef uint8_t (*SchSliceReCfgRspFunc)    ARGS((
+        Pst            *pst,            /* Post Structure */                         
+        SchSliceCfgRsp  *schSliceReCfgRsp /* Cell ReCfg Cfm */
+        ));
 /* function declarations */
-uint8_t packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd);
+uint8_t packMacSchSlotInd(Pst *pst, SlotTimingInfo *slotInd);
 uint8_t packSchMacDlAlloc(Pst *pst, DlSchedInfo  *dlSchedInfo);
 uint8_t packSchMacUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo);
 uint8_t packSchCellCfg(Pst *pst, SchCellCfg  *schCellCfg);
@@ -1348,7 +1777,6 @@ uint8_t MacProcSchCellCfg(Pst *pst, SchCellCfg  *schCellCfg);
 uint8_t MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm  *schCellCfgCfm);
 uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg);
 uint8_t schActvInit(Ent entity, Inst instId, Region region, Reason reason);
-uint8_t SchSendCfgCfm(Pst *pst, RgMngmt *cfm);
 uint8_t MacProcUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo);
 uint8_t packMacSchRachInd(Pst *pst, RachIndInfo *rachInd);
 uint8_t MacSchRachInd(Pst *pst, RachIndInfo *rachInd);
@@ -1356,20 +1784,37 @@ uint8_t packMacSchCrcInd(Pst *pst, CrcIndInfo *crcInd);
 uint8_t MacSchCrcInd(Pst *pst, CrcIndInfo *crcInd);
 uint8_t packMacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo);
 uint8_t MacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo);
-uint8_t packMacSchUeCreateReq(Pst *pst, SchUeCfg *ueCfgToSch);
-uint8_t MacSchUeCreateReq(Pst *pst, SchUeCfg *ueCfgToSch);
+uint8_t packMacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
+uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
 uint8_t packSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
 uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
-uint8_t MacSchSlotInd ARGS((Pst * pst, SlotIndInfo * slotInd));
-uint8_t packMacSchSlotInd(Pst * pst, SlotIndInfo * slotInd);
+uint8_t MacSchSlotInd ARGS((Pst * pst, SlotTimingInfo * slotInd));
+uint8_t packMacSchSlotInd(Pst * pst, SlotTimingInfo * slotInd);
 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 MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd);
-uint8_t packMacSchUeReconfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
-uint8_t MacSchUeReconfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
-
+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 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 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, SchSliceCfgReq *cfgReq);
+uint8_t MacSchSliceReCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq);
+uint8_t packSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t MacProcSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *sliceReCfgrsp);
 /**********************************************************************
   End of file
  **********************************************************************/