1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /************************************************************************
25 Desc: C source code for Entry point fucntions
29 **********************************************************************/
31 /** @file rg_sch_tmr.c
32 @brief This module does processing related to timers for the scheduler.
34 static const char* RLOG_MODULE_NAME="MAC";
35 static int RLOG_MODULE_ID=4096;
36 static int RLOG_FILE_ID=175;
38 /* header include files -- defines (.h) */
39 #include "common_def.h"
40 #include "tfu.h" /* RGU defines */
41 #include "lrg.h" /* layer management defines for LTE-MAC */
42 #include "rgr.h" /* layer management defines for LTE-MAC */
43 #include "rg_env.h" /* defines and macros for MAC */
44 #include "rg_sch_err.h" /* defines and macros for MAC */
45 #include "rg_sch_inf.h" /* defines and macros for MAC */
46 #include "rg_sch.h" /* defines and macros for MAC */
47 #include "rl_interface.h"
48 #include "rl_common.h"
51 /* header/extern include files (.x) */
52 #include "tfu.x" /* RGU types */
53 #include "lrg.x" /* layer management typedefs for MAC */
54 #include "rgr.x" /* layer management typedefs for MAC */
55 #include "rg_sch_inf.x" /* typedefs for MAC */
56 #include "rg_sch.x" /* typedefs for MAC */
59 Void rgSCHSCellActivation ARGS((
60 RgSchUeCellInfo *sCell
63 /** @brief This function is a utility function to start timers, it is a
68 * Function: rgSCHTmrStartTmr
71 * - Starts timer at scheduler
73 * @param[in] RgSchCellCb *cell
75 * @param[in] S16 tmrEvnt
76 * @param[in] uint32_t tmrVal
79 Void rgSCHTmrStartTmr(RgSchCellCb *cell,Ptr cb,S16 tmrEvnt,uint32_t tmrVal)
84 RgSchUeCellInfo *sCellCb = NULLP;
90 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
92 sCellCb = (RgSchUeCellInfo *)cb;
102 case RG_SCH_TMR_ACKNACK_REP:
103 arg.timers = &(ue->ackNakRepCb.ackNakRepTmr);
104 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
105 "Hit AckNackRep timer");
107 case RG_SCH_TMR_MEASGAP:
108 arg.timers = &(ue->measGapCb.measGapTmr);
110 case RG_SCH_TMR_UL_ACKNACK:
111 arg.timers = &(ue->ackNakRepCb.ackNakRepUlInactvTmr);
113 case RG_SCH_TMR_DL_ACKNACK:
114 arg.timers = &(ue->ackNakRepCb.ackNakRepDlInactvTmr);
116 case RG_SCH_TMR_UL_MEASGAP:
117 arg.timers = &(ue->measGapCb.measGapUlInactvTmr);
119 case RG_SCH_TMR_DL_MEASGAP:
120 arg.timers = &(ue->measGapCb.measGapDlInactvTmr);
123 arg.timers = &(ue->taTmr);
125 /*MS_WORKAROUND for CR FIXME */
129 arg.timers = &(ue->bsrTmr);
135 #ifdef NO_BSR_SR_5GTF
138 arg.timers = &(ue->bsrTmr);
142 case RG_SCH_TMR_TXMODE_TRNSTN:
144 arg.timers = &(ue->txModeTransTmr);
148 case RG_SCH_TMR_SCELL_DEACT:
150 arg.timers = &(sCellCb->deactTmr);
153 case RG_SCH_TMR_SCELL_ACT_DELAY:
155 sCellCb = (RgSchUeCellInfo *)cb;
156 arg.timers = &(sCellCb->actDelayTmr);
161 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
162 "rgSCHTmrStartTmr() Incorrect Timer event");
166 arg.tqCp = &(cell->tqCp);
178 /** @brief This function stops the timer.
182 * Function: rgSCHTmrStopTmr
185 * - Stops timer at scheduler.
187 * @param[in] RgSchCellCb *cell
188 * @param[in] S16 tmrEvnt
192 Void rgSCHTmrStopTmr(RgSchCellCb *cell,S16 tmrEvnt,Ptr cb)
197 RgSchUeCellInfo *sCellCb = NULLP;
203 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
205 sCellCb = (RgSchUeCellInfo *)cb;
215 case RG_SCH_TMR_ACKNACK_REP:
216 arg.timers = &(ue->ackNakRepCb.ackNakRepTmr);
218 case RG_SCH_TMR_MEASGAP:
219 arg.timers = &(ue->measGapCb.measGapTmr);
221 case RG_SCH_TMR_UL_ACKNACK:
222 arg.timers = &(ue->ackNakRepCb.ackNakRepUlInactvTmr);
224 case RG_SCH_TMR_DL_ACKNACK:
225 arg.timers = &(ue->ackNakRepCb.ackNakRepDlInactvTmr);
227 case RG_SCH_TMR_UL_MEASGAP:
228 arg.timers = &(ue->measGapCb.measGapUlInactvTmr);
230 case RG_SCH_TMR_DL_MEASGAP:
231 arg.timers = &(ue->measGapCb.measGapDlInactvTmr);
234 arg.timers = &(ue->taTmr);
236 /*MS_WORKAROUND for CR FIXME */
241 arg.timers = &(ue->bsrTmr);
247 #ifdef NO_BSR_SR_5GTF
250 arg.timers = &(ue->bsrTmr);
255 case RG_SCH_TMR_TXMODE_TRNSTN:
257 arg.timers = &(ue->txModeTransTmr);
261 case RG_SCH_TMR_SCELL_DEACT:
263 arg.timers = &(sCellCb->deactTmr);
266 case RG_SCH_TMR_SCELL_ACT_DELAY:
268 sCellCb = (RgSchUeCellInfo *)cb;
269 arg.timers = &(sCellCb->actDelayTmr);
275 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
276 "rgSCHTmrStopTmr() Incorrect Timer event");
280 arg.tqCp = &(cell->tqCp);
291 /** @brief This function handles timer expiry.
295 * Function: rgSCHTmrProcTmr
298 * - Handles processing on timer expiry at scheduler.
301 * @param[in] S16 tmrEvnt
304 Void rgSCHTmrProcTmr(Ptr cb,S16 tmrEvnt)
306 RgSchUeCb *ue = NULLP;
308 RgSchUeCellInfo *sCellCb = NULLP;
314 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
316 sCellCb = (RgSchUeCellInfo *)cb;
327 case RG_SCH_TMR_ACKNACK_REP:
328 rgSCHAckNakRepTmrExpry (ue);
330 case RG_SCH_TMR_MEASGAP:
331 rgSCHMeasGapANRepTmrExpry (ue);
333 case RG_SCH_TMR_UL_MEASGAP:
334 case RG_SCH_TMR_UL_ACKNACK:
335 rgSCHMeasGapANRepUlInactvTmrExpry (ue, (uint8_t)tmrEvnt);
337 case RG_SCH_TMR_DL_ACKNACK:
338 case RG_SCH_TMR_DL_MEASGAP:
339 rgSCHMeasGapANRepDlInactvTmrExpry (ue, (uint8_t)tmrEvnt);
343 /*TODO Needto handle TA Timer expiry for EMTC UE*/
344 if(TRUE == ue->isEmtcUe)
346 RLOG0(L_INFO,"TA Timer Expiry is not handled for EMTC UE\n");
350 rgSCHDhmProcTAExp (ue);
352 /*MS_WORKAROUND for CR FIXME */
356 rgSCHCmnBsrTmrExpry(ue);
362 rgSCHCmnBsrTmrExpry(ue);
367 case RG_SCH_TMR_TXMODE_TRNSTN:
369 ue->txModeTransCmplt = TRUE;
373 case RG_SCH_TMR_SCELL_DEACT:
375 rgSCHSCellDeactTmrExpry(sCellCb);
378 case RG_SCH_TMR_SCELL_ACT_DELAY:
380 sCellCb = (RgSchUeCellInfo *)cb;
381 rgSCHSCellActivation(sCellCb);
388 RLOG_ARG0(L_ERROR,DBG_INSTID,ue->cell->instIdx,
389 "rgSCHTmrProcTmr() Incorrect Timer event");
397 /**********************************************************************
400 **********************************************************************/