X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch.h;h=8bb6311ef99a96ed4687f70708e2cfbad5d9588f;hb=8582e5ba1e60662fcfc37a74a68492bec1cb263f;hp=57a4381750dce0b2a57dd6c646c4a0cd2de21b85;hpb=c449cf0b0cc8794c2e2d28dcc4c9bd8b9534e697;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 57a438175..8bb6311ef 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -76,6 +76,8 @@ #define MAX_DRX_SIZE 512 #endif +#define NUM_SCH_TYPE 2 /*Supported number of Scheduler Algorithm types*/ + typedef struct schDlHqProcCb SchDlHqProcCb; typedef struct schUlHqEnt SchUlHqEnt; typedef struct schRaReq SchRaReq; @@ -83,6 +85,12 @@ typedef struct schDlHqEnt SchDlHqEnt; typedef struct schCellCb SchCellCb; typedef struct schUeCb SchUeCb; +typedef enum +{ + SCH_FCFS, + SCH_SLICE_BASED +}SchType; + typedef enum { SCH_NUMEROLOGY_0, @@ -137,17 +145,6 @@ typedef struct lcInfo uint8_t allocPRB; /*PRB count which is allocated based on RRM policy/FreePRB*/ }LcInfo; -typedef struct schLcPrbEstimate -{ - /* TODO: For Multiple RRMPolicies, Make DedicatedLcInfo as array/Double Pointer - * and have separate DedLCInfo for each RRMPolcyMemberList*/ - /* Dedicated LC List will be allocated, if any available*/ - CmLListCp dedLcList; /*Contain LCInfo per RRMPolicy*/ - CmLListCp defLcList; /*Linklist of LC assoc with Default S-NSSAI(s)*/ - /* SharedPRB number can be used by any LC. - * Need to calculate in every Slot based on PRB availability*/ - uint16_t sharedNumPrb; -}SchLcPrbEstimate; typedef struct schUlHqTbCb { uint32_t tbSzReq; @@ -188,11 +185,12 @@ typedef struct schDlHqTbCb #ifdef NR_DRX typedef struct schDrxHarqCb { - uint32_t retxStrtIndex; - uint32_t rttIndex; - uint32_t retxIndex; - int16_t retxExpDistance; - uint8_t retxTmrReduction; + uint32_t rttExpIndex; + CmLList *rttExpNode; + uint32_t retxStrtIndex; + CmLList *retxStrtNode; + uint32_t retxExpIndex; + CmLList *retxExpNode; }SchDrxHarqCb; #endif @@ -206,14 +204,15 @@ typedef struct schUlHqProcCb CmLList ulSlotLnk; uint8_t strtSymbl; uint8_t numSymbl; - SchLcPrbEstimate ulLcPrbEst; /*UL PRB Alloc Estimate among different LC*/ + void *schSpcUlHqProcCb; /*!< Scheduler specific HARQ Proc CB */ CmLList ulHqProcLink; - uint8_t puschResType; /* Resource allocation type */ + uint8_t puschResType; /*!< Resource allocation type */ uint16_t puschStartPrb; uint16_t puschNumPrb; uint8_t dmrsMappingType; uint8_t nrOfDmrsSymbols; uint8_t dmrsAddPos; + SlotTimingInfo puschTime; #ifdef NR_DRX SchDrxHarqCb ulDrxHarqCb; #endif @@ -228,8 +227,9 @@ struct schDlHqProcCb CmLList ulSlotLnk; SchDlHqTbCb tbInfo[2]; uint8_t k1; - SchLcPrbEstimate dlLcPrbEst; /*DL PRB Alloc Estimate among different LC*/ + void *schSpcDlHqProcCb; /*!< Scheduler specific HARQ Proc CB */ CmLList dlHqProcLink; + SlotTimingInfo pucchTime; #ifdef NR_DRX SchDrxHarqCb dlDrxHarqCb; #endif @@ -392,7 +392,7 @@ typedef struct schUeCfgCb bool phyCellGrpCfgPres; SchPhyCellGrpCfg phyCellGrpCfg; bool spCellCfgPres; - SchSpCellCfg spCellCfg; + SchSpCellRecfg spCellCfg; SchAmbrCfg *ambrCfg; SchModulationInfo dlModInfo; SchModulationInfo ulModInfo; @@ -412,8 +412,12 @@ typedef struct schHqUlMap #ifdef NR_DRX typedef struct schDrxUeCb { - uint32_t drxDlUeActiveStatus; /* variable is used to store the status about downlink active status */ - uint32_t drxUlUeActiveStatus; /* variable is used to store the status about uplink active status */ + bool drxDlUeActiveStatus; /* Final Dl Ue status which is marked as true if drxDlUeActiveMask or drxDlUeActiveMaskForHarq is present */ + bool drxUlUeActiveStatus; /* Final Ul Ue status which is marked as true if drxUlUeActiveMask or drxUlUeActiveMaskForHarq is present */ + uint32_t drxDlUeActiveMask; /* variable is used to store the status about downlink active status of Ue for On-duration, inactive timer*/ + uint32_t drxUlUeActiveMask; /* variable is used to store the status about uplink active status for on-duration inactive timer*/ + uint32_t drxDlUeActiveMaskForHarq; /* variable is used to store the status about downlink active status for harq*/ + uint32_t drxUlUeActiveMaskForHarq; /* variable is used to store the status about uplink active status for harq */ uint32_t onDurationLen; /* length of on duration which is received from ue cfg/recfg in form of ms and subms, informs about after how many slots on duration gets expire */ uint32_t inActvTimerLen; /* length of inActvTimer value received from ue cfg/recfg in form of ms, informs about after how many slots in active gets expire */ uint8_t harqRttDlTimerLen; /* length of harqRttDlTimer received from ue cfg/recfg in form of symbols, inform about after how many slots on the harq drx-HARQ-RTT-TimerDL expire */ @@ -460,15 +464,14 @@ typedef struct schUeCb SchDlCb dlInfo; SchUlHqEnt ulHqEnt; SchDlHqEnt dlHqEnt; - SchDlHqProcCb *msg4Proc; + SchDlHqProcCb *msg4HqProc; SchDlHqProcCb *retxMsg4HqProc; - SchHqDlMap **hqDlmap; - SchHqUlMap **hqUlmap; - CmLListCp ulRetxHqList; - CmLListCp dlRetxHqList; + SchHqDlMap **hqDlmap; + SchHqUlMap **hqUlmap; + void *schSpcUeCb; #ifdef NR_DRX - bool ueDrxInfoPres; - SchDrxUeCb drxUeCb; + bool ueDrxInfoPres; + SchDrxUeCb drxUeCb; #endif }SchUeCb; @@ -524,6 +527,41 @@ typedef struct schDrxCb }SchDrxCb; #endif +typedef struct schAllApis +{ + uint8_t (* SchCellCfgReq)(SchCellCb *cellCb); + void (* SchCellDeleteReq)(SchCellCb *cellCb); + uint8_t (* SchAddUeConfigReq)(SchUeCb *ueCb); + void (* SchModUeConfigReq)(SchUeCb *ueCb); + void (* SchUeDeleteReq)(SchUeCb *ueCb); + void (* SchDlHarqInd)(); + void (* SchPagingInd)(); + void (* SchRachRsrcReq)(); + void (* SchRachRsrcRel)(); + void (* SchCrcInd)(SchCellCb *cellCb, uint16_t ueId); + void (* SchRachInd)(SchCellCb *cellCb, uint16_t ueId); + void (* SchDlRlcBoInfo)(SchCellCb *cellCb, uint16_t ueId); + void (* SchSrUciInd)(SchCellCb *cellCb, uint16_t ueId); + void (* SchBsr)(SchCellCb *cellCb, uint16_t ueId); + void (* SchHandleLcList)(void *ptr, CmLList *node, ActionTypeLL action); + void (* SchAddToDlHqRetxList)(SchDlHqProcCb *hqP); + void (* SchAddToUlHqRetxList)(SchUlHqProcCb *hqP); + void (* SchRemoveFrmDlHqRetxList)(SchUeCb *ueCb, CmLList *node); + void (* SchRemoveFrmUlHqRetxList)(SchUeCb *ueCb, CmLList *node); + uint8_t (* SchAddUeToSchedule)(SchCellCb *cellCb, uint16_t ueId); + void (* SchRemoveUeFrmScheduleLst)(SchCellCb *cell, CmLList *node); + uint8_t (* SchInitDlHqProcCb)(SchDlHqProcCb *hqP); + uint8_t (* SchInitUlHqProcCb)(SchUlHqProcCb *hqP); + void (* SchFreeDlHqProcCb)(SchDlHqProcCb *hqP); + void (* SchFreeUlHqProcCb)(SchUlHqProcCb *hqP); + void (* SchDeleteDlHqProcCb)(SchDlHqProcCb *hqP); + void (* SchDeleteUlHqProcCb)(SchUlHqProcCb *hqP); + void (* SchScheduleSlot)(SchCellCb *cell, SlotTimingInfo *slotInd, Inst schInst); + uint32_t (* SchScheduleDlLc)(SlotTimingInfo pdcchTime, SlotTimingInfo pdschTime, uint8_t pdschNumSymbols, \ + bool isRetx, SchDlHqProcCb **hqP); + uint8_t (* SchScheduleUlLc)(SlotTimingInfo dciTime, SlotTimingInfo puschTime, uint8_t startStmb, \ + uint8_t symbLen, bool isRetx, SchUlHqProcCb **hqP); +}SchAllApis; /** * @brief * Cell Control block per cell. @@ -548,7 +586,6 @@ typedef struct schCellCb 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 */ @@ -558,13 +595,16 @@ typedef struct schCellCb #ifdef NR_DRX SchDrxCb drxCb[MAX_DRX_SIZE]; /*!< Drx cb*/ #endif + SchType schAlgoType; /*!< The scheduler type which the cell is configured with.*/ + SchAllApis *api; /*!< Reference of sch APIs for this cell based on the SchType*/ + void *schSpcCell; /*Ref of Scheduler specific structure*/ }SchCellCb; typedef struct schSliceCfg { uint8_t numOfSliceConfigured; - SchRrmPolicyOfSlice **listOfConfirguration; + SchRrmPolicyOfSlice **listOfSlices; }SchSliceCfg; /** @@ -573,12 +613,13 @@ typedef struct schSliceCfg */ typedef struct schCb { - TskInit schInit; /*!< Task Init info */ - 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 */ - SchSliceCfg sliceCfg; + TskInit schInit; /*!< Task Init info */ + SchGenCb genCfg; /*!< General Config info */ + CmTqCp tmrTqCp; /*!< Timer Task Queue Cntrl Point */ + CmTqType tmrTq[SCH_TQ_SIZE]; /*!< Timer Task Queue */ + SchAllApis allApis[NUM_SCH_TYPE]; /*!