#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; \
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 */
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
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 */
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;
SchServCellCfgInfo servCellCfg;
}SchSpCellCfg;
+/* Special cell Reconfiguration */
+typedef struct schSpCellRecfg
+{
+ uint8_t servCellIdx;
+ SchServCellRecfgInfo servCellRecfg;
+}SchSpCellRecfg;
+
/* Uplink logical channel configuration */
typedef struct SchUlLcCfg
{
/* Logical Channel configuration */
typedef struct schLcCfg
{
- ConfigType configType;
uint8_t lcId;
- SchDrbQosInfo *drbQos;
Snssai *snssai;
+ SchDrbQosInfo *drbQos;
SchDlLcCfg dlLcCfg;
SchUlLcCfg ulLcCfg;
}SchLcCfg;
}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;
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
typedef struct schRachRsrcRel
{
+ SlotTimingInfo slotInd;
uint16_t cellId;
uint16_t crnti;
SchCfraResource cfraResource;
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
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
{
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;
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 */
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 */
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 */
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 */
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((
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);
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);