25#ifndef _NETSIM_LTENR_MAC_H_
26#define _NETSIM_LTENR_MAC_H_
31#pragma region HEADER_FILES
35#define MIN_RESOURCE_SHARE 0
36#define MAX_RESOURCE_SHARE 1
38#pragma region SCHEDULING_TYPE
39 typedef enum enum_LTENR_MAC_GnbSchedulingType {
40 LTENR_MAC_SCHEDULING_ROUNDROBIN,
41 LTENR_MAC_SCHEDULING_PROPORTIONALFAIR,
42 LTENR_MAC_SCHEDULING_MAXTHROUGHTPUT,
43 LTENR_MAC_SCHEDULING_FAIR_SCHEDULING,
44 LTENR_MAC_SCHEDULING_PF_WITH_RG,
45 }LTENR_GnbSchedulingType;
48#pragma region UE_SCHEDULER_INFO
51 __IN__ NETSIM_ID ueId;
52 __IN__ NETSIM_ID ueIf;
53 __IN__ UINT bufferSize;
54 __IN__ UINT64 bitsPerPRB;
55 __IN__ UINT64 bitsPerPRBLayer[MAX_LAYER_COUNT];
56 __IN__ UINT64 TBSLayer[MAX_LAYER_COUNT];
57 __IN__
double initRank;
64 __IN__
double rateGuarantee;
65 __IN__
double slice_lower_bound;
66 __IN__
double slice_upper_bound;
67 __OUT__
double lambda_L;
68 __OUT__
double lambda_U;
70 __OUT__
double CurrentRate;
71 __OUT__
bool isInitialized;
79 __IN__
double averageThroughput;
82 __IN__ UINT PRBReqdForHARQRetransmission;
84 __OUT__ UINT allocatedPRBCount;
86 }LTENR_UESCHEDULERINFO, * ptrLTENR_UESCHEDULERINFO;
89#pragma region SCHEDULER_INFO
92 __IN__ NETSIM_ID gnbId;
93 __IN__ NETSIM_ID gnbIf;
98 __IN__ BOOL isPRBRankInit;
99 __IN__ BOOL isUERRCSetUpCompleted;
100 __IN__ LTENR_GnbSchedulingType schedulingType;
102 __IN__ __OUT__ LTENR_SLOTTYPE slotType;
103 __IN__ UINT TotalPRBReqdForHARQRetransmission;
105 __IN__ ptrLTENR_UESCHEDULERINFO uplinkInfo;
106 __IN__ ptrLTENR_UESCHEDULERINFO downlinkInfo;
107 }LTENR_SCHEDULERINFO, * ptrLTENR_SCHEDULERINFO;
110#pragma region GNB_MAC
119 ptrLTENR_SCHEDULERINFO schedulerInfo[MAX_CA_COUNT];
120 }LTENR_GNBMAC, * ptrLTENR_GNBMAC;
123#pragma region BWP_SWITCH
129 }LTENR_BwpSwitch, * ptrLTENR_BwpSwitch;
132#pragma region VARIABLE_AND_FUN_DEF
133 double initTotalPRBAvailable;
134 void LTENR_PRB_Scheduler(ptrLTENR_SCHEDULERINFO schedulerInfo);
135 void PFS_RG_AllocatePRB(ptrLTENR_UESCHEDULERINFO *list, ptrLTENR_SCHEDULERINFO schedulerInfo, UINT sliceId);
136 ptrLTENR_UESCHEDULERINFO LTENR_MACScheduler_FindInfoForUE(ptrLTENR_SCHEDULERINFO si,
137 NETSIM_ID d, NETSIM_ID in,
140 ptrLTENR_BwpSwitch LTENR_BWP_Switch(ptrLTENR_SCHEDULERINFO schedulerInfo, ptrLTENR_UESCHEDULERINFO curr, UINT PRB_needed);