[Epic-ID: ODUHIGH-464][Task-ID: ODUHIGH-479] WG8 Alignment | Second Phase | UeCfg...
[o-du/l2.git] / src / cm / mac_sch_interface.h
index 1ab00fb..f6eae33 100644 (file)
@@ -47,6 +47,7 @@
 #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 MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
 #define SCH_SSB_MASK_SIZE   1
 #define DEFAULT_K2_VALUE_FOR_SCS60  2
 #define DEFAULT_K2_VALUE_FOR_SCS120 3 
 
-#define ADD_DELTA_TO_TIME(crntTime, toFill, incr)          \
+#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;                                 \
@@ -772,6 +773,46 @@ typedef struct schHqCfgParam
    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 */
@@ -790,13 +831,14 @@ typedef struct schCellCfg
    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
@@ -1159,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 */
@@ -1480,19 +1526,39 @@ typedef struct schUlBwpInfo
    uint8_t        bwpId;
 }SchUlBwpInfo;
 
+/* Serving cell configuration */
+typedef struct schServCellRecfgInfo
+{
+   SchInitalDlBwp        initDlBwp;
+   uint8_t               numDlBwpToAddOrMod;
+   SchDlBwpInfo          dlBwpToAddOrModList[MAX_NUM_BWP];
+   uint8_t               numDlBwpToRel;
+   SchDlBwpInfo          dlBwpToRelList[MAX_NUM_BWP];
+   uint8_t               firstActvDlBwpId;
+   uint8_t               defaultDlBwpId;
+   uint8_t               *bwpInactivityTmr;
+   SchPdschServCellCfg   pdschServCellCfg;
+   SchInitialUlBwp       initUlBwp;
+   uint8_t               numUlBwpToAddOrMod;
+   SchUlBwpInfo          ulBwpToAddOrModList[MAX_NUM_BWP];
+   uint8_t               numUlBwpToRel;
+   SchUlBwpInfo          ulBwpToRelList[MAX_NUM_BWP];
+   uint8_t               firstActvUlBwpId;
+}SchServCellRecfgInfo;
+
 /* Serving cell configuration */
 typedef struct schServCellCfgInfo
 {
    SchInitalDlBwp        initDlBwp;
    uint8_t               numDlBwpToAdd;
-   SchDlBwpInfo          DlBwpToAddList[MAX_NUM_BWP];
+   SchDlBwpInfo          dlBwpToAddList[MAX_NUM_BWP];
    uint8_t               firstActvDlBwpId;
    uint8_t               defaultDlBwpId;
    uint8_t               *bwpInactivityTmr;
    SchPdschServCellCfg   pdschServCellCfg;
    SchInitialUlBwp       initUlBwp;
    uint8_t               numUlBwpToAdd;
-   SchUlBwpInfo          UlBwpToAddList[MAX_NUM_BWP];
+   SchUlBwpInfo          ulBwpToAddList[MAX_NUM_BWP];
    uint8_t               firstActvUlBwpId;
 }SchServCellCfgInfo;
 
@@ -1553,6 +1619,13 @@ typedef struct schSpCellCfg
    SchServCellCfgInfo   servCellCfg;
 }SchSpCellCfg;
 
+/* Special cell Reconfiguration */
+typedef struct schSpCellRecfg
+{
+   uint8_t           servCellIdx;
+   SchServCellRecfgInfo   servCellRecfg;
+}SchSpCellRecfg;
+
 /* Uplink logical channel configuration */
 typedef struct SchUlLcCfg
 {
@@ -1572,10 +1645,9 @@ typedef struct schDlLcCfg
 /* Logical Channel configuration */
 typedef struct schLcCfg
 {
-   ConfigType     configType;
    uint8_t        lcId;
-   SchDrbQosInfo  *drbQos;
    Snssai         *snssai;
+   SchDrbQosInfo  *drbQos;
    SchDlLcCfg     dlLcCfg;
    SchUlLcCfg     ulLcCfg;
 }SchLcCfg;
@@ -1594,10 +1666,11 @@ typedef struct schModulationInfo
 }SchModulationInfo;
 
 /* UE configuration */
-typedef struct schUeCfg
+typedef struct schUeCfgReq
 {
    uint16_t        cellId;
    uint8_t         ueId;
+   uint8_t         beamIdx; 
    uint16_t        crnti;
    bool macCellGrpCfgPres;
    SchMacCellGrpCfg   macCellGrpCfg;
@@ -1608,26 +1681,58 @@ typedef struct schUeCfg
    SchAmbrCfg         *ambrCfg;
    SchModulationInfo  dlModInfo;
    SchModulationInfo  ulModInfo;
-   uint8_t            numLcs;
+   uint8_t            numLcsToAdd;
    SchLcCfg           schLcCfg[MAX_NUM_LC];
+}SchUeCfgReq;
+
+/* UE Re-configuration */
+typedef struct schUeRecfgReq
+{
+   uint16_t         cellId;
+   uint8_t          ueId;
+   uint8_t          beamIdx;
+   uint16_t         crnti;
+   bool             macCellGrpRecfgPres;
+   SchMacCellGrpCfg macCellGrpRecfg;
+   bool             phyCellGrpRecfgPres;
+   SchPhyCellGrpCfg phyCellGrpRecfg;
+   bool             spCellRecfgPres;
+   SchSpCellRecfg   spCellRecfg;
+   SchAmbrCfg       *ambrRecfg;
+   SchModulationInfo  dlModInfo;
+   SchModulationInfo  ulModInfo;
+   uint8_t            numLcsToAdd;
+   SchLcCfg           schLcCfgAdd[MAX_NUM_LC];
+   uint8_t            numLcsToDel;
+   uint8_t            lcIdToDel[MAX_NUM_LC];
+   uint8_t            numLcsToMod;
+   SchLcCfg           schLcCfgMod[MAX_NUM_LC];
    SchDataTransmission dataTransmissionInfo;
-}SchUeCfg;
+#ifdef NR_DRX   
+   bool     drxConfigIndicatorRelease;
+#endif
+}SchUeRecfgReq;
 
 typedef struct schUeCfgRsp
 {
    uint16_t   cellId;
+   uint8_t    beamIdx;
    uint16_t   ueId;
    uint16_t   crnti;
    SchMacRsp  rsp;
    SchFailureCause cause;
 }SchUeCfgRsp;
 
+/*As per WG8, UE ReCFG and UECFG have same structure definition*/
+typedef struct schUeCfgRsp SchUeRecfgRsp;
+
 typedef struct schRachRsrcReq
 {
-   uint16_t cellId;
-   uint16_t crnti;
-   uint8_t  numSsb;
-   uint8_t  ssbIdx[MAX_NUM_SSB];
+   SlotTimingInfo slotInd;
+   uint16_t       cellId;
+   uint16_t       crnti;
+   uint8_t        numSsb;
+   uint8_t        ssbIdx[MAX_NUM_SSB];
 }SchRachRsrcReq;
 
 typedef struct schCfraSsbResource
@@ -1652,6 +1757,7 @@ typedef struct schRachRsrcRsp
 
 typedef struct schRachRsrcRel
 {
+   SlotTimingInfo slotInd;
    uint16_t   cellId;
    uint16_t   crnti;
    SchCfraResource  cfraResource;
@@ -1671,16 +1777,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
@@ -1707,14 +1814,14 @@ typedef struct srUciIndInfo
    uint8_t     srPayload[MAX_SR_BITS_IN_BYTES];
 }SrUciIndInfo;
 
-typedef struct harqUciIndInfo
+typedef struct dlHarqInd
 {
    uint16_t    cellId;
    uint16_t    crnti;
    SlotTimingInfo slotInd;
    uint8_t     numHarq;
    uint8_t     harqPayload[MAX_HARQ_BITS_IN_BYTES];
-}HarqUciIndInfo;
+}DlHarqInd;
 
 typedef struct schRrmPolicyRatio
 {
@@ -1742,12 +1849,16 @@ typedef struct sliceRsp
    RspCause   cause;
 }SliceRsp;
 
-typedef struct schSliceRsp
+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;
@@ -1810,7 +1921,7 @@ typedef uint8_t (*MacSchDlRlcBoInfoFunc) ARGS((
 
 typedef uint8_t (*MacSchAddUeConfigReqFunc) ARGS((
         Pst         *pst,           /* Post structure */
-        SchUeCfg    *ueCfgToSch));   /* Scheduler UE Cfg */
+        SchUeCfgReq    *ueCfgToSch));   /* Scheduler UE Cfg */
 
 typedef uint8_t (*SchUeCfgRspFunc) ARGS((
         Pst         *pst,           /* Post structure */
@@ -1825,9 +1936,9 @@ typedef uint8_t (*MacSchBsrFunc)       ARGS((
    UlBufferStatusRptInd *bsrInd
 ));
 
-typedef uint8_t (*MacSchHarqUciIndFunc) ARGS((
+typedef uint8_t (*MacSchDlHarqIndFunc) ARGS((
         Pst         *pst,         /* Post structure */
-        HarqUciIndInfo  *uciInd));    /* UCI IND Info */
+        DlHarqInd  *dlHarqInd));  /* Dl HARQ IND Info */
 
 typedef uint8_t (*MacSchSrUciIndFunc) ARGS(( 
         Pst         *pst,         /* Post structure */
@@ -1835,11 +1946,11 @@ typedef uint8_t (*MacSchSrUciIndFunc) ARGS((
 
 typedef uint8_t (*MacSchModUeConfigReqFunc) ARGS((
         Pst         *pst,           /* Post structure */
-        SchUeCfg    *ueCfgToSch));   /* Scheduler UE Cfg */
+        SchUeRecfgReq    *ueRecfgToSch));   /* Scheduler UE Recfg */
 
-typedef uint8_t (*SchUeReCfgRspFunc) ARGS((
+typedef uint8_t (*SchUeRecfgRspFunc) ARGS((
         Pst         *pst,           /* Post structure */
-        SchUeCfgRsp *cfgRsp));       /* Scheduler UE Cfg response */
+        SchUeRecfgRsp *recfgRsp));       /* Scheduler UE Cfg response */
 
 typedef uint8_t (*MacSchRachRsrcReqFunc) ARGS((
     Pst         *pst,                    /* Post structure */
@@ -1863,7 +1974,7 @@ 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 */
@@ -1878,13 +1989,13 @@ typedef uint8_t (*SchSliceCfgRspFunc)    ARGS((
         SchSliceCfgRsp  *schSliceCfgRsp /* Cell Cfg Cfm */
         ));
 
-typedef uint8_t (*MacSchSliceReCfgReqFunc) ARGS((
+typedef uint8_t (*MacSchSliceRecfgReqFunc) ARGS((
    Pst          *pst,           /* Post structure */
-   SchSliceCfgReq *schSliceReCfgReq));  /* Scheduler Slice ReCfg Req */
+   SchSliceRecfgReq *schSliceRecfgReq));  /* Scheduler Slice Recfg Req */
 
-typedef uint8_t (*SchSliceReCfgRspFunc)    ARGS((
+typedef uint8_t (*SchSliceRecfgRspFunc)    ARGS((
         Pst            *pst,            /* Post Structure */                         
-        SchSliceCfgRsp  *schSliceReCfgRsp /* Cell ReCfg Cfm */
+        SchSliceRecfgRsp  *schSliceRecfgRsp /* Cell Recfg Cfm */
         ));
 
 typedef uint8_t (*MacSchPagingIndFunc) ARGS((
@@ -1913,23 +2024,25 @@ 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 packMacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
-uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
+uint8_t packMacSchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfgToSch);
+uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfgToSch);
 uint8_t packSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
 uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
+uint8_t packSchUeRecfgRsp(Pst *pst, SchUeRecfgRsp *cfgRsp);
+uint8_t MacProcSchUeRecfgRsp(Pst *pst, SchUeRecfgRsp *reCfgRsp);
 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 packMacSchHarqUciInd(Pst *pst, HarqUciIndInfo *uciInd);
-uint8_t MacSchHarqUciInd(Pst *pst, HarqUciIndInfo *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 packMacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfgToSch);
+uint8_t MacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfgToSch);
+uint8_t packSchUeReconfigRsp(Pst *pst, SchUeRecfgRsp *recfgRsp);
+uint8_t MacProcSchUeReconfigRsp(Pst *pst, SchUeRecfgRsp *recfgRsp);
 uint8_t packMacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
 uint8_t MacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
 uint8_t packSchRachRsrcRsp(Pst *pst, SchRachRsrcRsp *schRachRsrcRsp);
@@ -1940,18 +2053,18 @@ 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, SchSliceCfgReq *cfgReq);
-uint8_t MacSchSliceReCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq);
-uint8_t packSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
-uint8_t MacProcSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *sliceReCfgrsp);
+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);