X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch.h;h=1b262b3c77a6b4c8a1408d9afc98539d8f6a6239;hb=8133a1985d2c53074af88c44edfb9231af64b433;hp=544e3250dfcae2201a1cb7d883bcc3d1c6276299;hpb=e6391c742645c17e4494d52f94fdeb66cfc99d1e;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 544e3250d..1b262b3c7 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -96,6 +96,7 @@ typedef enum CREATE, DELETE }ActionTypeLcLL; + /** * @brief * Structure holding LTE MAC's General Configuration information. @@ -143,14 +144,15 @@ typedef struct schDlSlotInfo uint8_t pdcchUe; /*!< UE for which PDCCH is scheduled in this slot */ uint8_t pdschUe; /*!< UE for which PDSCH is scheduled in this slot */ RarAlloc *rarAlloc[MAX_NUM_UE]; /*!< RAR allocation per UE*/ - DlMsgAlloc *dlMsgAlloc; /*!< Dl msg allocation */ + DciInfo *ulGrant; + DlMsgAlloc *dlMsgAlloc[MAX_NUM_UE]; /*!< Dl msg allocation per UE*/ }SchDlSlotInfo; typedef struct schRaCb { bool msg4recvd; - DlMsgInfo dlMsgInfo; uint16_t tcrnti; + uint16_t dlMsgPduLen; }SchRaCb; /** @@ -271,6 +273,7 @@ typedef struct schUeCb SchUeState state; SchCellCb *cellCb; bool srRcvd; + bool bsrRcvd; BsrInfo bsrInfo[MAX_NUM_LOGICAL_CHANNEL_GROUPS]; SchUlCb ulInfo; SchDlCb dlInfo; @@ -321,6 +324,13 @@ typedef struct schCellCb #endif }SchCellCb; + +typedef struct schSliceCfg +{ + uint8_t numOfSliceConfigured; + SchRrmPolicyOfSlice **listOfConfirguration; +}SchSliceCfg; + /** * @brief * Control block for sch @@ -331,7 +341,8 @@ typedef struct schCb SchGenCb genCfg; /*!< General Config info */ CmTqCp tmrTqCp; /*!< Timer Task Queue Cntrl Point */ CmTqType tmrTq[SCH_TQ_SIZE]; /*!< Timer Task Queue */ - SchCellCb *cells[MAX_NUM_CELL]; /* Array to store cellCb ptr */ + SchCellCb *cells[MAX_NUM_CELL]; /* Array to store cellCb ptr */ + SchSliceCfg sliceCfg; }SchCb; /* Declaration for scheduler control blocks */ @@ -361,16 +372,18 @@ 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); -uint8_t schProcessMsg4Req(SchCellCb *cell, SlotTimingInfo currTime); +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 schDlRsrcAllocDlMsg(SchCellCb *cell, SlotTimingInfo slotTime, uint16_t crnti,\ - uint32_t tbSize, DlMsgAlloc *dlMsgAlloc, uint16_t startPRB); -uint8_t schDlRsrcAllocMsg4(SchCellCb *cell, SlotTimingInfo msg4Time, uint8_t ueIdx, DlMsgAlloc *msg4Alloc, uint8_t k0Idx); +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); -uint16_t searchLargestFreeBlockDL(SchCellCb *cell, SlotTimingInfo slotTime,uint16_t *startPrb); -void updateGrantSizeForBoRpt(CmLListCp *lcLL, DlMsgAlloc *dlMsgAlloc, uint32_t *accumalatedBOSize); +void fillDlMsgInfo(DlMsgInfo *dlMsgInfo, uint8_t crnti); +bool findValidK0K1Value(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId, bool dedMsg, uint8_t *pdschStartSymbol,\ +uint8_t *pdschSymblLen, SlotTimingInfo *pdcchTime, SlotTimingInfo *pdschTime, SlotTimingInfo *pucchTime); /* UL scheduling related function declarations */ uint8_t schUlResAlloc(SchCellCb *cell, Inst schInst); @@ -378,15 +391,22 @@ bool schCheckPrachOcc(SchCellCb *cell, SlotTimingInfo prachOccasionTimingInfo); uint8_t schCalcPrachNumRb(SchCellCb *cell); void schPrachResAlloc(SchCellCb *cell, UlSchedInfo *ulSchedInfo, SlotTimingInfo prachOccasionTimingInfo); uint16_t schAllocPucchResource(SchCellCb *cell, SlotTimingInfo pucchTime, uint16_t crnti); -uint8_t schFillUlDci(SchUeCb *ueCb, SchPuschInfo puschInfo, DciInfo *dciInfo); -uint8_t schFillPuschAlloc(SchUeCb *ueCb, SlotTimingInfo pdcchSlotTime, uint32_t dataVol, SchPuschInfo *puschInfo); +uint8_t schFillUlDci(SchUeCb *ueCb, SchPuschInfo *puschInfo, DciInfo *dciInfo); +uint8_t schFillPuschAlloc(SchUeCb *ueCb, SlotTimingInfo puschTime, uint32_t tbsSize, \ + uint8_t startSymb, uint8_t symbLen, uint16_t startPrb); uint8_t allocatePrbUl(SchCellCb *cell, SlotTimingInfo slotTime, uint8_t startSymbol, uint8_t symbolLength, \ uint16_t *startPrb, uint16_t numPrb); +bool schProcessSrOrBsrReq(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId); +bool schCalculateUlTbs(SchUeCb *ueCb, SlotTimingInfo puschTime, uint8_t symbLen,\ + uint16_t *startPrb, uint32_t *totTBS); /*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); void prbAllocUsingRRMPolicy(CmLListCp *lcLL, bool dedicatedPRB, uint16_t mcsIdx,uint8_t numSymbols,\ - uint16_t *sharedPRB, uint16_t *reservedPRB, bool *isTxPayloadLenAdded); + uint16_t *sharedPRB, uint16_t *reservedPRB, bool *isTxPayloadLenAdded, bool *srRcvd); +void updateBsrAndLcList(CmLListCp *lcLL, BsrInfo *bsrInfo, uint8_t status); /********************************************************************** End of file