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 EXTERN PUBLIC 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] U32 tmrVal
80 PUBLIC Void rgSCHTmrStartTmr
88 PUBLIC Void rgSCHTmrStartTmr (cell, cb, tmrEvnt, tmrVal)
98 RgSchUeCellInfo *sCellCb = NULLP;
101 TRC2(rgSCHTmrStartTmr);
107 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
109 sCellCb = (RgSchUeCellInfo *)cb;
119 case RG_SCH_TMR_ACKNACK_REP:
120 arg.timers = &(ue->ackNakRepCb.ackNakRepTmr);
121 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
122 "Hit AckNackRep timer");
124 case RG_SCH_TMR_MEASGAP:
125 arg.timers = &(ue->measGapCb.measGapTmr);
127 case RG_SCH_TMR_UL_ACKNACK:
128 arg.timers = &(ue->ackNakRepCb.ackNakRepUlInactvTmr);
130 case RG_SCH_TMR_DL_ACKNACK:
131 arg.timers = &(ue->ackNakRepCb.ackNakRepDlInactvTmr);
133 case RG_SCH_TMR_UL_MEASGAP:
134 arg.timers = &(ue->measGapCb.measGapUlInactvTmr);
136 case RG_SCH_TMR_DL_MEASGAP:
137 arg.timers = &(ue->measGapCb.measGapDlInactvTmr);
140 arg.timers = &(ue->taTmr);
142 /*MS_WORKAROUND for CR FIXME */
146 arg.timers = &(ue->bsrTmr);
152 #ifdef NO_BSR_SR_5GTF
155 arg.timers = &(ue->bsrTmr);
159 case RG_SCH_TMR_TXMODE_TRNSTN:
161 arg.timers = &(ue->txModeTransTmr);
165 case RG_SCH_TMR_SCELL_DEACT:
167 arg.timers = &(sCellCb->deactTmr);
170 case RG_SCH_TMR_SCELL_ACT_DELAY:
172 sCellCb = (RgSchUeCellInfo *)cb;
173 arg.timers = &(sCellCb->actDelayTmr);
178 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
179 "rgSCHTmrStartTmr() Incorrect Timer event");
183 arg.tqCp = &(cell->tqCp);
195 /** @brief This function stops the timer.
199 * Function: rgSCHTmrStopTmr
202 * - Stops timer at scheduler.
204 * @param[in] RgSchCellCb *cell
205 * @param[in] S16 tmrEvnt
210 PUBLIC Void rgSCHTmrStopTmr
217 PUBLIC Void rgSCHTmrStopTmr (cell, tmrEvnt, cb)
226 RgSchUeCellInfo *sCellCb = NULLP;
229 TRC2(rgSCHTmrStopTmr);
235 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
237 sCellCb = (RgSchUeCellInfo *)cb;
247 case RG_SCH_TMR_ACKNACK_REP:
248 arg.timers = &(ue->ackNakRepCb.ackNakRepTmr);
250 case RG_SCH_TMR_MEASGAP:
251 arg.timers = &(ue->measGapCb.measGapTmr);
253 case RG_SCH_TMR_UL_ACKNACK:
254 arg.timers = &(ue->ackNakRepCb.ackNakRepUlInactvTmr);
256 case RG_SCH_TMR_DL_ACKNACK:
257 arg.timers = &(ue->ackNakRepCb.ackNakRepDlInactvTmr);
259 case RG_SCH_TMR_UL_MEASGAP:
260 arg.timers = &(ue->measGapCb.measGapUlInactvTmr);
262 case RG_SCH_TMR_DL_MEASGAP:
263 arg.timers = &(ue->measGapCb.measGapDlInactvTmr);
266 arg.timers = &(ue->taTmr);
268 /*MS_WORKAROUND for CR FIXME */
273 arg.timers = &(ue->bsrTmr);
279 #ifdef NO_BSR_SR_5GTF
282 arg.timers = &(ue->bsrTmr);
287 case RG_SCH_TMR_TXMODE_TRNSTN:
289 arg.timers = &(ue->txModeTransTmr);
293 case RG_SCH_TMR_SCELL_DEACT:
295 arg.timers = &(sCellCb->deactTmr);
298 case RG_SCH_TMR_SCELL_ACT_DELAY:
300 sCellCb = (RgSchUeCellInfo *)cb;
301 arg.timers = &(sCellCb->actDelayTmr);
307 RLOG_ARG0(L_ERROR,DBG_INSTID,cell->instIdx,
308 "rgSCHTmrStopTmr() Incorrect Timer event");
312 arg.tqCp = &(cell->tqCp);
323 /** @brief This function handles timer expiry.
327 * Function: rgSCHTmrProcTmr
330 * - Handles processing on timer expiry at scheduler.
333 * @param[in] S16 tmrEvnt
337 PUBLIC Void rgSCHTmrProcTmr
343 PUBLIC Void rgSCHTmrProcTmr (cb, tmrEvnt)
348 RgSchUeCb *ue = NULLP;
350 RgSchUeCellInfo *sCellCb = NULLP;
353 TRC2(rgSCHTmrProcTmr);
358 if(tmrEvnt == RG_SCH_TMR_SCELL_DEACT)
360 sCellCb = (RgSchUeCellInfo *)cb;
371 case RG_SCH_TMR_ACKNACK_REP:
372 rgSCHAckNakRepTmrExpry (ue);
374 case RG_SCH_TMR_MEASGAP:
375 rgSCHMeasGapANRepTmrExpry (ue);
377 case RG_SCH_TMR_UL_MEASGAP:
378 case RG_SCH_TMR_UL_ACKNACK:
379 rgSCHMeasGapANRepUlInactvTmrExpry (ue, (U8)tmrEvnt);
381 case RG_SCH_TMR_DL_ACKNACK:
382 case RG_SCH_TMR_DL_MEASGAP:
383 rgSCHMeasGapANRepDlInactvTmrExpry (ue, (U8)tmrEvnt);
387 /*TODO Needto handle TA Timer expiry for EMTC UE*/
388 if(TRUE == ue->isEmtcUe)
390 RLOG0(L_INFO,"TA Timer Expiry is not handled for EMTC UE\n");
394 rgSCHDhmProcTAExp (ue);
396 /*MS_WORKAROUND for CR FIXME */
400 rgSCHCmnBsrTmrExpry(ue);
406 rgSCHCmnBsrTmrExpry(ue);
411 case RG_SCH_TMR_TXMODE_TRNSTN:
413 ue->txModeTransCmplt = TRUE;
417 case RG_SCH_TMR_SCELL_DEACT:
419 rgSCHSCellDeactTmrExpry(sCellCb);
422 case RG_SCH_TMR_SCELL_ACT_DELAY:
424 sCellCb = (RgSchUeCellInfo *)cb;
425 rgSCHSCellActivation(sCellCb);
432 RLOG_ARG0(L_ERROR,DBG_INSTID,ue->cell->instIdx,
433 "rgSCHTmrProcTmr() Incorrect Timer event");
441 /**********************************************************************
444 **********************************************************************/