typedef enum
{
SCH_UE_STATE_INACTIVE,
- SCH_UE_STATE_ACTIVE
+ SCH_UE_STATE_ACTIVE,
+ SCH_UE_HANDIN_IN_PROGRESS
}SchUeState;
typedef enum
WINDOW_EXPIRED
}RaRspWindowStatus;
-typedef enum
-{
- SEARCH,
- CREATE,
- DELETE
-}ActionTypeLcLL;
-
/**
* @brief
* Structure holding LTE MAC's General Configuration information.
typedef struct schUeCfgCb
{
uint16_t cellId;
+ uint8_t ueId;
uint16_t crnti;
bool macCellGrpCfgPres;
SchMacCellGrpCfg macCellGrpCfg;
SchAmbrCfg *ambrCfg;
SchModulationInfo dlModInfo;
SchModulationInfo ulModInfo;
+ SchDataTransmission dataTransmissionAction;
}SchUeCfgCb;
/*Following structures to keep record and estimations of PRB allocated for each
*/
typedef struct schUeCb
{
- uint16_t ueIdx;
+ uint16_t ueId;
uint16_t crnti;
SchUeCfgCb ueCfg;
SchUeState state;
SchCellCb *cellCb;
+ SchCfraResource cfraResource;
bool srRcvd;
bool bsrRcvd;
BsrInfo bsrInfo[MAX_NUM_LOGICAL_CHANNEL_GROUPS];
{
uint32_t raRnti;
RachIndInfo *rachInd;
+ bool isCFRA;
+ SchUeCb *ueCb; /* Filled only if isCFRA = true */
SlotTimingInfo winStartTime;
SlotTimingInfo winEndTime;
}SchRaReq;
+typedef struct schPageInfo
+{
+ uint16_t pf; /*Value of Paging Frame received from DUAPP*/
+ uint8_t i_s; /*Value of Paging Occ Index received from DUAPP*/
+ SlotTimingInfo pageTxTime; /*Start Paging window*/
+ uint8_t mcs; /*MCS index*/
+ uint16_t msgLen; /*Pdu length */
+ uint8_t *pagePdu; /*RRC Page PDU bit string*/
+}SchPageInfo;
+
+typedef struct schPagingOcc
+{
+ uint8_t frameOffset;
+ uint8_t pagingOccSlot;
+}SchPagingOcc;
+
+typedef struct schPageCb
+{
+ CmLListCp pageIndInfoRecord[MAX_SFN]; /*List of Page Records received which are stored per sfn*/
+ SchPagingOcc pagMonOcc[MAX_PO_PER_PF]; /*Paging Occasion Slot/FrameOffset are stored*/
+}SchPageCb;
+
/**
* @brief
* Cell Control block per cell.
SchCellCfg cellCfg; /*!< Cell ocnfiguration */
bool firstSsbTransmitted;
bool firstSib1Transmitted;
- uint8_t ssbStartSymbArr[SCH_MAX_SSB_BEAM]; /*!<start symbol per SSB beam */
+ uint8_t ssbStartSymbArr[SCH_MAX_SSB_BEAM]; /*!< start symbol per SSB beam */
+ uint64_t dedPreambleBitMap; /*!< Bit map to find used/free preambles index */
SchRaReq *raReq[MAX_NUM_UE]; /*!< Pending RA request */
SchRaCb raCb[MAX_NUM_UE]; /*!< RA Cb */
- uint16_t numActvUe; /*!<Number of active UEs */
- uint32_t actvUeBitMap; /*!<Bit map to find active UEs */
- uint32_t boIndBitMap; /*!<Bit map to indicate UEs that have recevied BO */
- SchUeCb ueCb[MAX_NUM_UE]; /*!<Pointer to UE contexts of this cell */
- CmLListCp ueToBeScheduled; /*!<Linked list to store UEs pending to be scheduled, */
+ uint16_t numActvUe; /*!< Number of active UEs */
+ uint32_t actvUeBitMap; /*!< Bit map to find active UEs */
+ uint32_t boIndBitMap; /*!< Bit map to indicate UEs that have recevied BO */
+ SchUeCb ueCb[MAX_NUM_UE]; /*!< Pointer to UE contexts of this cell */
+ CmLListCp ueToBeScheduled; /*!< Linked list to store UEs pending to be scheduled, */
+ SchPageCb pageCb; /*!< Page Record at Schedular*/
#ifdef NR_TDD
uint8_t numSlotsInPeriodicity; /*!< number of slots in configured periodicity and SCS */
uint32_t slotFrmtBitMap; /*!< 2 bits must be read together to determine D/U/S slots. 00-D, 01-U, 10-S */
PduTxOccsaion schCheckSib1Occ(SchCellCb *cell, SlotTimingInfo slotTime);
uint8_t schBroadcastSsbAlloc(SchCellCb *cell, SlotTimingInfo slotTime, DlBrdcstAlloc *dlBrdcstAlloc);
uint8_t schBroadcastSib1Alloc(SchCellCb *cell, SlotTimingInfo slotTime, DlBrdcstAlloc *dlBrdcstAlloc);
-bool schProcessRaReq(SchCellCb *cellCb, SlotTimingInfo currTime, uint8_t ueId);
+bool schProcessRaReq(Inst schInst, SchCellCb *cellCb, SlotTimingInfo currTime, uint8_t ueId);
bool schProcessMsg4Req(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId);
-uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueIdx, RarAlloc *rarAlloc, uint8_t k0Index);
+uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAlloc *rarAlloc, uint8_t k0Index);
uint8_t schDlRsrcAllocDlMsg(SchCellCb *cell, SlotTimingInfo slotTime, uint16_t crnti,
uint32_t tbSize, DlMsgAlloc *dlMsgAlloc, uint16_t startPRB, uint8_t pdschStartSymbol, uint8_t pdschNumSymbols);
uint8_t schDlRsrcAllocMsg4(SchCellCb *cell, SlotTimingInfo msg4Time, uint8_t ueId, DlMsgAlloc *msg4Alloc,\
uint8_t pdschStartSymbol, uint8_t pdschNumSymbols);
-uint16_t schAccumalateLcBoSize(SchCellCb *cell, uint16_t ueIdx);
uint8_t allocatePrbDl(SchCellCb *cell, SlotTimingInfo slotTime, uint8_t startSymbol, uint8_t symbolLength, \
uint16_t *startPrb, uint16_t numPrb);
void fillDlMsgInfo(DlMsgInfo *dlMsgInfo, uint8_t crnti);
/*Generic Functions*/
void updateGrantSizeForBoRpt(CmLListCp *lcLL, DlMsgAlloc *dlMsgAlloc, BsrInfo *bsrInfo, uint32_t *accumalatedBOSize);
uint16_t searchLargestFreeBlock(SchCellCb *cell, SlotTimingInfo slotTime,uint16_t *startPrb, Direction dir);
-LcInfo* handleLcLList(CmLListCp *lcLL, uint8_t lcId, ActionTypeLcLL action);
+LcInfo* handleLcLList(CmLListCp *lcLL, uint8_t lcId, ActionTypeLL action);
void prbAllocUsingRRMPolicy(CmLListCp *lcLL, bool dedicatedPRB, uint16_t mcsIdx,uint8_t numSymbols,\
uint16_t *sharedPRB, uint16_t *reservedPRB, bool *isTxPayloadLenAdded, bool *srRcvd);
void updateBsrAndLcList(CmLListCp *lcLL, BsrInfo *bsrInfo, uint8_t status);
+/*Paging Functions*/
+void schProcPagingCfg(SchCellCb *cell);
+void schCfgPdcchMonOccOfPO(SchCellCb *cell);
+void schIncrSlot(SlotTimingInfo *timingInfo, uint8_t incr, uint16_t numSlotsPerRF);
+uint8_t schFillPagePdschCfg(SchCellCb *cell, PdschCfg *pagePdschCfg, SlotTimingInfo slotTime, \
+ uint16_t tbSize, uint8_t mcs, uint16_t startPrb);
+
/**********************************************************************
End of file
**********************************************************************/