RLC BO, BO response and DL Data handling. [Issue-ID: ODUHIGH-181]
[o-du/l2.git] / src / 5gnrmac / rg_ex_ms.c
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /************************************************************************
20  
21      Name:     LTE-MAC layer
22   
23      Type:     C source file
24   
25      Desc:     C source code SSI Interface Implementation
26   
27      File:     rg_ex_ms.c 
28   
29 **********************************************************************/
30
31 /** @file rg_ex_ms.c
32 @brief This file contains the implementation of callback functions 
33 registered with SSI during the LTE MAC Task initialization.
34 */
35 /* header include files -- defines (.h) */
36 #include "common_def.h"
37 #include "rgu.h"           /* RGU defines */
38 #include "tfu.h"           /* RGU defines */
39 #include "lrg.h"           /* layer management defines for LTE-MAC */
40 #include "rgr.h"           /* layer management defines for LTE-MAC */
41 #include "crg.h"           /* CRG interface includes */
42 #include "rg_sch_inf.h"    /* SCH interface includes */
43 #include "rg_prg.h"        /* PRG interface includes */
44 #include "rg_env.h"        /* customisable defines and macros for LTE-MAC */
45 #include "rg.h"            /* defines and macros for MAC */
46 #include "rgr.h"            /* defines and macros for SCH */
47
48
49 /* header/extern include files (.x) */
50 #include "rgu.x"           /* RGU types */
51 #include "tfu.x"           /* RGU types */
52 #include "lrg.x"           /* layer management typedefs for MAC */
53 #include "rgr.x"           /* layer management typedefs for MAC */
54 #include "crg.x"           /* CRG interface typedes */
55 #include "rg_sch_inf.x"    /* SCH interface typedefs */
56 #include "rg_prg.x"        /*PRG interface includes*/
57 #include "du_app_mac_inf.h"
58 #include "rg.x"            /* typedefs for MAC */
59 #include "rlc_mac_inf.h"
60
61 /**
62  * @brief Task Activation callback function Entity SM. 
63  *
64  * @details
65  *
66  *     Function : rgHdlSMEvents
67  *     
68  *     Process Messages received from Entity SM
69  *     
70  *  @param[in]  Pst     *pst, Post structure of the primitive.     
71  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
72  *  @param[in]  Reason reason.
73  *  @return  void
74  **/
75 #ifdef ANSI
76 PRIVATE INLINE void rgHdlSMEvents
77 (
78 Pst     *pst,                       /* post structure       */
79 Buffer  *mBuf                       /* message buffer       */
80 )
81 #else
82 PRIVATE INLINE void rgHdlSMEvents(pst, mBuf)
83 Pst     *pst;                       /* post structure       */
84 Buffer  *mBuf;                      /* message buffer       */
85 #endif
86 {
87    TRC2(rgHdlSMEvents)
88
89    switch(pst->event)
90    {
91 #ifdef LCRGMILRG
92       case EVTLRGCFGREQ:
93          /* Process a config. request */
94          cmUnpkLrgCfgReq(RgMiLrgCfgReq, pst, mBuf);
95          break;
96       case EVTMACSCHGENCFGREQ:
97          /* Process a config. request */
98          cmUnpkLrgSchCfgReq(MacSchGenCfgReq, pst, mBuf);
99          break;
100       case EVTLRGCNTRLREQ:
101          /* Process a control request */
102          cmUnpkLrgCntrlReq(RgMiLrgCntrlReq, pst, mBuf);
103          break;
104       case EVTLRGSSTAREQ:
105          /* Process a status request  */
106          cmUnpkLrgStaReq(RgMiLrgStaReq, pst, mBuf);
107          break;
108       case EVTLRGSTSREQ:
109          /* Process a statistics request */
110          cmUnpkLrgStsReq(RgMiLrgStsReq, pst, mBuf);
111          break;
112 #endif /* LCRGMILRG */
113       case EVENT_MAC_CELL_CONFIG_REQ:
114          /* Process MAC cell config */
115          unpackDuMacCellCfg(MacProcCellCfgReq, pst, mBuf);
116          break;
117       case EVENT_MAC_CELL_START_REQ:
118          /* Process MAC cell start request */
119          unpackMacCellStartReq(MacProcCellStartReq, pst, mBuf);
120          break;
121                 case EVENT_MAC_CELL_STOP_REQ:
122                         /* Process MAC cell stop request */
123                         unpackMacCellStopReq(MacProcCellStopReq, pst, mBuf);
124                         break;
125                 case EVENT_MAC_DL_CCCH_IND:
126                         /* Process DL CCCH Ind */
127                         unpackMacDlCcchInd(MacProcDlCcchInd, pst, mBuf);
128                         break;
129                 case EVENT_MAC_UE_CREATE_REQ:
130                    /* Process Ue Create Request */
131                         unpackMacUeCreateReq(MacProcUeCreateReq, pst, mBuf);
132                         break;
133       default:
134          RG_FREE_MSG(mBuf);
135          break;
136    }
137 }
138
139
140 /**
141  * @brief Task Activation callback function Entity NH. 
142  *
143  * @details
144  *
145  *     Function : rgHdlNHEvents
146  *     
147  *     Process Messages received from Entity NH
148  *     
149  *  @param[in]  Pst     *pst, Post structure of the primitive.     
150  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
151  *  @param[in]  Reason reason.
152  *  @return  void
153  **/
154 #ifdef ANSI
155 PRIVATE INLINE void rgHdlNHEvents
156 (
157 Pst     *pst,                       /* post structure       */
158 Buffer  *mBuf                       /* message buffer       */
159 )
160 #else
161 PRIVATE INLINE void rgHdlNHEvents(pst, mBuf)
162 Pst     *pst;                       /* post structure       */
163 Buffer  *mBuf;                      /* message buffer       */
164 #endif
165 {
166    TRC2(rgHdlNHEvents)
167
168    switch(pst->event)
169    {
170 #ifdef LCRGUICRG
171       case EVTCRGBNDREQ:
172          cmUnpkCrgBndReq(RgUiCrgBndReq, pst, mBuf);
173          break;
174       case EVTCRGUBNDREQ:
175          cmUnpkCrgUbndReq(RgUiCrgUbndReq, pst, mBuf);
176          break;
177       case EVTCRGCFGREQ:
178          cmUnpkCrgCfgReq(RgUiCrgCfgReq, pst, mBuf);
179          break;
180 #endif            
181       default:
182          RG_FREE_MSG(mBuf);
183          break;
184    }
185 }
186
187 /**
188  * @brief Task Activation callback function Entity KW. 
189  *
190  * @details
191  *
192  *     Function : rgHdlKWEvents
193  *     
194  *     Process Messages received from Entity KW
195  *     
196  *  @param[in]  Pst     *pst, Post structure of the primitive.     
197  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
198  *  @param[in]  Reason reason.
199  *  @return  void
200  **/
201 #ifdef ANSI
202 PRIVATE INLINE void rgHdlKWEvents
203 (
204 Pst     *pst,                       /* post structure       */
205 Buffer  *mBuf                       /* message buffer       */
206 )
207 #else
208 PRIVATE INLINE void rgHdlKWEvents(pst, mBuf)
209 Pst     *pst;                       /* post structure       */
210 Buffer  *mBuf;                      /* message buffer       */
211 #endif
212 {
213    TRC2(rgHdlKWEvents)
214
215    switch(pst->event)
216    {
217 #ifdef LCRGUIRGU
218       case EVTRGUBNDREQ:
219          cmUnpkRguBndReq(RgUiRguBndReq, pst, mBuf);
220          break;
221       case EVTRGUUBNDREQ:
222          cmUnpkRguUbndReq(RgUiRguUbndReq, pst, mBuf);
223          break;
224       case EVENT_DL_DATA_TO_MAC:
225          unpackRlcDlData(MacProcRlcDlData, pst, mBuf);
226          break;
227       case EVENT_BO_STATUS_TO_MAC:
228          unpackRlcBoStatus(MacProcRlcBoStatus, pst, mBuf);
229          break;
230 #ifdef LTE_L2_MEAS
231
232       case EVTRGUL2MULTHRPMEASREQ:
233          cmUnpkRguL2MUlThrpMeasReq(RgUiRguL2MUlThrpMeasReq, pst,mBuf);
234          break;
235
236 #endif
237 #endif            
238       default:
239          RG_FREE_MSG(mBuf);
240          break;
241    }
242 }
243
244 /**
245  * @brief Task Activation callback function Entity TF. 
246  *
247  * @details
248  *
249  *     Function : rgHdlTFEvents
250  *     
251  *     Process Messages received from Entity TF
252  *     
253  *  @param[in]  Pst     *pst, Post structure of the primitive.     
254  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
255  *  @param[in]  Reason reason.
256  *  @return  void
257  **/
258 #ifdef ANSI
259 PRIVATE INLINE void rgHdlTFEvents
260 (
261 Pst     *pst,                       /* post structure       */
262 Buffer  *mBuf                       /* message buffer       */
263 )
264 #else
265 PRIVATE INLINE void rgHdlTFEvents(pst, mBuf)
266 Pst     *pst;                       /* post structure       */
267 Buffer  *mBuf;                      /* message buffer       */
268 #endif
269 {
270    TRC2(rgHdlTFEvents)
271
272    switch(pst->event)
273    {
274 #if  (defined(LCRGLITFU) || defined(LWLCRGLITFU))
275       case EVTTFUBNDCFM:
276          cmUnpkTfuBndCfm(RgLiTfuBndCfm, pst, mBuf);
277          break;
278       case EVTTFUDATIND:
279          cmUnpkTfuDatInd(RgLiTfuDatInd, pst, mBuf);
280          break;
281 #if defined(TENB_T2K3K_SPECIFIC_CHANGES) && defined(LTE_TDD)
282       case EVTTFUNONRTIND:
283          cmUnpkTfuNonRtInd(RgLiTfuNonRtInd, pst, mBuf);
284          break;
285 #endif
286 #endif            
287       default:
288          RG_FREE_MSG(mBuf);
289          break;
290    }
291 }
292
293
294 /**
295  * @brief Task Activation callback function Entity RG SCH. 
296  *
297  * @details
298  *
299  *     Function : rgHdlRGEvents
300  *     
301  *     Process Messages received from Entity RG SCH
302  *     
303  *  @param[in]  Pst     *pst, Post structure of the primitive.     
304  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
305  *  @param[in]  Reason reason.
306  *  @return  void
307  **/
308 #ifdef ANSI
309 PRIVATE INLINE void rgHdlRGEvents
310 (
311 Pst     *pst,                       /* post structure       */
312 Buffer  *mBuf                       /* message buffer       */
313 )
314 #else
315 PRIVATE INLINE void rgHdlRGEvents(pst, mBuf)
316 Pst     *pst;                       /* post structure       */
317 Buffer  *mBuf;                      /* message buffer       */
318 #endif
319 {
320    TRC2(rgHdlRGEvents)
321
322    switch(pst->event)
323    {
324 #ifdef LCRG
325       case EVTINFCELLREGREQ:
326          cmUnpkSchMacCellRegReq(RgSchMacCellRegReq, pst, mBuf);
327          break;
328       case EVTINFSFALLOCREQ:
329          cmUnpkSchMacSfAllocReq(RgSchMacSfAllocReq, pst, mBuf);
330          break;
331       case EVTINFRLSHQREQ:
332          cmUnpkSchMacRlsHqReq(RgSchMacRlsHqReq, pst, mBuf);
333          break;
334       case EVTINFHQENTRESET:
335          cmUnpkSchMacRstHqEntReq(RgSchMacRstHqEntReq, pst, mBuf);
336          break;
337       case EVTINFRLSRNTIREQ:
338          cmUnpkSchMacRlsRntiReq(RgSchMacRlsRntiReq, pst, mBuf);
339          break;
340 #ifdef LTEMAC_SPS
341       case EVTINFSPSLCREG:
342          cmUnpkSchMacSpsLcRegReq(RgSchMacSpsLcRegReq, pst, mBuf);
343          break;
344       case EVTINFSPSLCDEREG:
345          cmUnpkSchMacSpsLcDeregReq(RgSchMacSpsLcDeregReq, pst, mBuf);
346          break;
347       case EVTINFSPSRESET:
348          cmUnpkSchMacUlSpsResetReq(RgSchMacUlSpsResetReq, pst, mBuf);
349          break;
350 #endif /* LTEMAC_SPS */
351 #ifdef LTE_L2_MEAS
352       case EVTINFL2MEASREQ:
353          cmUnpkSchMacL2MeasReq(RgSchMacL2MeasReq, pst, mBuf);
354          break;
355       case EVTINFL2MEASSENDREQ :
356          cmUnpkSchMacL2MeasSendReq(RgSchMacL2MeasSendReq, pst , mBuf);
357          break;
358       case EVTINFL2MEASSTOPREQ:
359          cmUnpkSchMacL2MeasStopReq(RgSchMacL2MeasStopReq, pst , mBuf);
360          break;
361 #endif/* LTE_L2_MEAS */
362       case EVTINFLCGREG:
363          cmUnpkSchMacLcgRegReq(RgSchMacLcgRegReq, pst, mBuf);
364          break;
365 #endif            
366 #if defined(LTE_ADV) && defined(LCPRG)
367       case EVTPRGUESCELLCFGREQ:
368       {
369          cmUnpkPrgPMacSMacUeSCellCfgReq(RgPrgPMacSMacUeSCellCfgReq, pst, mBuf);
370       }
371       break;
372       case EVTPRGUESCELLCFGCFM:
373       case EVTPRGUESCELLLCHMODCFM:
374       case EVTPRGUESCELLLCHDELCFMDEL:
375       case EVTPRGUESCELLLCHADDCFM:
376       {
377          cmUnpkPrgSMacPMacCfgCfm(RgPrgSMacPMacCfgCfm, pst, mBuf);
378       }
379       break;
380       case EVTPRGUESCELLDELREQ:
381       {
382          cmUnpkPrgPMacSMacUeSCellDelReq(RgPrgPMacSMacUeSCellDelReq, pst, mBuf);
383       }
384       break;
385       case EVTPRGUESCELLLCHMODREQ:
386       {
387          cmUnpkPrgPMacSMacUeSCellLchModReq(RgPrgPMacSMacUeSCellLchModReq, pst,
388                                            mBuf);
389       }
390       break;
391       case EVTPRGUESCELLLCHDELREQ:
392       {
393          cmUnpkPrgPMacSMacUeSCellLchDelReq(RgPrgPMacSMacUeSCellLchDelReq, pst,
394                                            mBuf);
395       }
396       break;
397       case EVTPRGUESCELLLCHADDREQ:
398       {
399          cmUnpkPrgPMacSMacUeSCellLchAddReq(RgPrgPMacSMacUeSCellLchAddReq, pst,
400                                            mBuf);
401       }
402       break;
403
404 #endif
405       default:
406       {
407          RG_FREE_MSG(mBuf);
408          break;
409       }
410
411    }
412 }
413
414
415 \f
416 /**
417  * @brief Task Activation callback function. 
418  *
419  * @details
420  *
421  *     Function : rgActvTsk
422  *     
423  *     Primitives invoked by MAC's users/providers through
424  *     a loosely coupled interface arrive here by means of 
425  *     SSI's message handling. This API is registered with
426  *     SSI during the Task Registration of MAC.
427  *     
428  *  @param[in]  Pst     *pst, Post structure of the primitive.     
429  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
430  *  @param[in]  Reason reason.
431  *  @return  S16
432  *      -# ROK
433  **/
434 #ifdef ANSI
435 S16 rgActvTsk
436 (
437 Pst     *pst,                       /* post structure       */
438 Buffer  *mBuf                       /* message buffer       */
439 )
440 #else
441 S16 rgActvTsk(pst, mBuf)
442 Pst     *pst;                       /* post structure       */
443 Buffer  *mBuf;                      /* message buffer       */
444 #endif
445 {
446    TRC2(rgActvTsk)
447
448    switch(pst->srcEnt)
449    {
450       /* The originator of this message is the stack manager,
451        * unpack and go to the respective primitive processing function */
452       case ENTDUAPP:
453           rgHdlSMEvents(pst, mBuf);
454            break;
455       case ENTNH:
456           rgHdlNHEvents(pst, mBuf);
457           break;
458       case ENTRLC:
459           rgHdlKWEvents(pst, mBuf);
460           break;
461       case ENTLWRMAC:
462           rgHdlTFEvents(pst, mBuf);
463           break;
464       case ENTMAC: /* When scheduler instance sends msg to MAC */
465           rgHdlRGEvents(pst, mBuf);
466           break;
467        default:
468           RG_FREE_MSG(mBuf);
469           break;
470    }
471    ODU_EXIT_TASK();
472    return ROK;
473 }/* end of rgActvTsk */
474
475 \f
476 /**********************************************************************
477  
478          End of file
479 **********************************************************************/