edb6639853c3a6e87dbf700ce194528439352dcc
[o-du/l2.git] / src / 5gnrmac / mac_msg_router.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:     mac_msg_router.c
28   
29 **********************************************************************/
30
31 /** @file mac_msg_router.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 #include "lwr_mac_upr_inf.h"
61
62 /**
63  * @brief Task Activation callback function Entity SM. 
64  *
65  * @details
66  *
67  *     Function : rgHdlSMEvents
68  *     
69  *     Process Messages received from Entity SM
70  *     
71  *  @param[in]  Pst     *pst, Post structure of the primitive.     
72  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
73  *  @param[in]  Reason reason.
74  *  @return  void
75  **/
76 static inline void rgHdlSMEvents
77 (
78 Pst     *pst,                       /* post structure       */
79 Buffer  *mBuf                       /* message buffer       */
80 )
81 {
82    switch(pst->event)
83    {
84 #ifdef LCRGMILRG
85       case EVTLRGCFGREQ:
86          /* Process a config. request */
87          cmUnpkLrgCfgReq(RgMiLrgCfgReq, pst, mBuf);
88          break;
89       case EVTMACSCHGENCFGREQ:
90          /* Process a config. request */
91          cmUnpkLrgSchCfgReq(MacSchGenCfgReq, pst, mBuf);
92          break;
93       case EVTLRGCNTRLREQ:
94          /* Process a control request */
95          cmUnpkLrgCntrlReq(RgMiLrgCntrlReq, pst, mBuf);
96          break;
97       case EVTLRGSSTAREQ:
98          /* Process a status request  */
99          cmUnpkLrgStaReq(RgMiLrgStaReq, pst, mBuf);
100          break;
101       case EVTLRGSTSREQ:
102          /* Process a statistics request */
103          cmUnpkLrgStsReq(RgMiLrgStsReq, pst, mBuf);
104          break;
105 #endif /* LCRGMILRG */
106       case EVENT_MAC_CELL_CONFIG_REQ:
107          /* Process MAC cell config */
108          unpackDuMacCellCfg(MacProcCellCfgReq, pst, mBuf);
109          break;
110       case EVENT_MAC_CELL_START:
111          /* Process MAC cell start request */
112          unpackMacCellStart(MacProcCellStart, pst, mBuf);
113          break;
114       case EVENT_MAC_CELL_STOP:
115          /* Process MAC cell stop request */
116          unpackMacCellStop(MacProcCellStop, pst, mBuf);
117          break;
118       case EVENT_MAC_DL_CCCH_IND:
119          /* Process DL CCCH Ind */
120          unpackMacDlCcchInd(MacProcDlCcchInd, pst, mBuf);
121          break;
122       case EVENT_MAC_UE_CREATE_REQ:
123          /* Process Ue Create Request */
124          unpackMacUeCreateReq(MacProcUeCreateReq, pst, mBuf);
125          break;
126       case EVENT_MAC_UE_RECONFIG_REQ:
127          /* Process Ue Reconfig Request */
128          unpackMacUeReconfigReq(MacProcUeReconfigReq, pst, mBuf);
129          break;
130     case EVENT_MAC_UE_DELETE_REQ:
131     {
132        unpackMacUeDeleteReq(MacProcUeDeleteReq, pst, mBuf);
133        break;
134     }
135     case EVENT_MAC_CELL_DELETE_REQ:
136     {
137        unpackMacCellDeleteReq(MacProcCellDeleteReq, pst, mBuf);
138        break;
139     }
140     default:
141          RG_FREE_MSG(mBuf);
142          break;
143    }
144 }
145
146
147 /**
148  * @brief Task Activation callback function Entity NH. 
149  *
150  * @details
151  *
152  *     Function : rgHdlNHEvents
153  *     
154  *     Process Messages received from Entity NH
155  *     
156  *  @param[in]  Pst     *pst, Post structure of the primitive.     
157  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
158  *  @param[in]  Reason reason.
159  *  @return  void
160  **/
161 static inline void rgHdlNHEvents
162 (
163 Pst     *pst,                       /* post structure       */
164 Buffer  *mBuf                       /* message buffer       */
165 )
166 {
167    switch(pst->event)
168    {
169 #ifdef LCRGUICRG
170       case EVTCRGBNDREQ:
171          cmUnpkCrgBndReq(RgUiCrgBndReq, pst, mBuf);
172          break;
173       case EVTCRGUBNDREQ:
174          cmUnpkCrgUbndReq(RgUiCrgUbndReq, pst, mBuf);
175          break;
176       case EVTCRGCFGREQ:
177          cmUnpkCrgCfgReq(RgUiCrgCfgReq, pst, mBuf);
178          break;
179 #endif            
180       default:
181          RG_FREE_MSG(mBuf);
182          break;
183    }
184 }
185
186 /**
187  * @brief Task Activation callback function Entity KW. 
188  *
189  * @details
190  *
191  *     Function : rgHdlKWEvents
192  *     
193  *     Process Messages received from Entity KW
194  *     
195  *  @param[in]  Pst     *pst, Post structure of the primitive.     
196  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
197  *  @param[in]  Reason reason.
198  *  @return  void
199  **/
200 static inline void rgHdlKWEvents
201 (
202 Pst     *pst,                       /* post structure       */
203 Buffer  *mBuf                       /* message buffer       */
204 )
205 {
206    switch(pst->event)
207    {
208 #ifdef LCRGUIRGU
209       case EVTRGUBNDREQ:
210          cmUnpkRguBndReq(RgUiRguBndReq, pst, mBuf);
211          break;
212       case EVTRGUUBNDREQ:
213          cmUnpkRguUbndReq(RgUiRguUbndReq, pst, mBuf);
214          break;
215       case EVENT_DL_DATA_TO_MAC:
216          unpackRlcDlData(MacProcRlcDlData, pst, mBuf);
217          break;
218       case EVENT_BO_STATUS_TO_MAC:
219          unpackRlcBoStatus(MacProcRlcBoStatus, pst, mBuf);
220          break;
221 #ifdef LTE_L2_MEAS
222
223       case EVTRGUL2MULTHRPMEASREQ:
224          cmUnpkRguL2MUlThrpMeasReq(RgUiRguL2MUlThrpMeasReq, pst,mBuf);
225          break;
226
227 #endif
228 #endif            
229       default:
230          RG_FREE_MSG(mBuf);
231          break;
232    }
233 }
234
235 /**
236  * @brief Task Activation callback function Entity TF. 
237  *
238  * @details
239  *
240  *     Function : rgHdlTFEvents
241  *     
242  *     Process Messages received from Entity TF
243  *     
244  *  @param[in]  Pst     *pst, Post structure of the primitive.     
245  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
246  *  @param[in]  Reason reason.
247  *  @return  void
248  **/
249 static inline void rgHdlTFEvents
250 (
251 Pst     *pst,                       /* post structure       */
252 Buffer  *mBuf                       /* message buffer       */
253 )
254 {
255    switch(pst->event)
256    {
257       case EVENT_SLOT_IND_TO_MAC:
258          unpackSlotInd(fapiMacSlotInd, pst, mBuf);
259          break;
260       case EVENT_STOP_IND_TO_MAC:
261          unpackStopInd(fapiMacStopInd, pst, mBuf);
262          break;
263       case EVENT_RACH_IND_TO_MAC:
264          unpackRachInd(fapiMacRachInd, pst, mBuf);
265          break;
266       case EVENT_CRC_IND_TO_MAC:
267          unpackCrcInd(fapiMacCrcInd, pst, mBuf);
268          break;
269       case EVENT_RX_DATA_IND_TO_MAC:
270          unpackRxDataInd(fapiMacRxDataInd, pst, mBuf);
271          break;
272       case EVENT_UCI_IND_TO_MAC:
273          unpackUciInd(FapiMacUciInd, pst, mBuf);
274          break;
275       default:
276          RG_FREE_MSG(mBuf);
277          break;
278    }
279 }
280
281
282 /**
283  * @brief Task Activation callback function Entity RG SCH. 
284  *
285  * @details
286  *
287  *     Function : rgHdlRGEvents
288  *     
289  *     Process Messages received from Entity RG SCH
290  *     
291  *  @param[in]  Pst     *pst, Post structure of the primitive.     
292  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
293  *  @param[in]  Reason reason.
294  *  @return  void
295  **/
296 static inline void rgHdlRGEvents
297 (
298 Pst     *pst,                       /* post structure       */
299 Buffer  *mBuf                       /* message buffer       */
300 )
301 {
302    switch(pst->event)
303    {
304 #ifdef LCRG
305       case EVTINFCELLREGREQ:
306          cmUnpkSchMacCellRegReq(RgSchMacCellRegReq, pst, mBuf);
307          break;
308       case EVTINFSFALLOCREQ:
309          cmUnpkSchMacSfAllocReq(RgSchMacSfAllocReq, pst, mBuf);
310          break;
311       case EVTINFRLSHQREQ:
312          cmUnpkSchMacRlsHqReq(RgSchMacRlsHqReq, pst, mBuf);
313          break;
314       case EVTINFHQENTRESET:
315          cmUnpkSchMacRstHqEntReq(RgSchMacRstHqEntReq, pst, mBuf);
316          break;
317       case EVTINFRLSRNTIREQ:
318          cmUnpkSchMacRlsRntiReq(RgSchMacRlsRntiReq, pst, mBuf);
319          break;
320 #ifdef LTEMAC_SPS
321       case EVTINFSPSLCREG:
322          cmUnpkSchMacSpsLcRegReq(RgSchMacSpsLcRegReq, pst, mBuf);
323          break;
324       case EVTINFSPSLCDEREG:
325          cmUnpkSchMacSpsLcDeregReq(RgSchMacSpsLcDeregReq, pst, mBuf);
326          break;
327       case EVTINFSPSRESET:
328          cmUnpkSchMacUlSpsResetReq(RgSchMacUlSpsResetReq, pst, mBuf);
329          break;
330 #endif /* LTEMAC_SPS */
331 #ifdef LTE_L2_MEAS
332       case EVTINFL2MEASREQ:
333          cmUnpkSchMacL2MeasReq(RgSchMacL2MeasReq, pst, mBuf);
334          break;
335       case EVTINFL2MEASSENDREQ :
336          cmUnpkSchMacL2MeasSendReq(RgSchMacL2MeasSendReq, pst , mBuf);
337          break;
338       case EVTINFL2MEASSTOPREQ:
339          cmUnpkSchMacL2MeasStopReq(RgSchMacL2MeasStopReq, pst , mBuf);
340          break;
341 #endif/* LTE_L2_MEAS */
342       case EVTINFLCGREG:
343          cmUnpkSchMacLcgRegReq(RgSchMacLcgRegReq, pst, mBuf);
344          break;
345 #endif            
346 #if defined(LTE_ADV) && defined(LCPRG)
347       case EVTPRGUESCELLCFGREQ:
348       {
349          cmUnpkPrgPMacSMacUeSCellCfgReq(RgPrgPMacSMacUeSCellCfgReq, pst, mBuf);
350       }
351       break;
352       case EVTPRGUESCELLCFGCFM:
353       case EVTPRGUESCELLLCHMODCFM:
354       case EVTPRGUESCELLLCHDELCFMDEL:
355       case EVTPRGUESCELLLCHADDCFM:
356       {
357          cmUnpkPrgSMacPMacCfgCfm(RgPrgSMacPMacCfgCfm, pst, mBuf);
358       }
359       break;
360       case EVTPRGUESCELLDELREQ:
361       {
362          cmUnpkPrgPMacSMacUeSCellDelReq(RgPrgPMacSMacUeSCellDelReq, pst, mBuf);
363       }
364       break;
365       case EVTPRGUESCELLLCHMODREQ:
366       {
367          cmUnpkPrgPMacSMacUeSCellLchModReq(RgPrgPMacSMacUeSCellLchModReq, pst,
368                                            mBuf);
369       }
370       break;
371       case EVTPRGUESCELLLCHDELREQ:
372       {
373          cmUnpkPrgPMacSMacUeSCellLchDelReq(RgPrgPMacSMacUeSCellLchDelReq, pst,
374                                            mBuf);
375       }
376       break;
377       case EVTPRGUESCELLLCHADDREQ:
378       {
379          cmUnpkPrgPMacSMacUeSCellLchAddReq(RgPrgPMacSMacUeSCellLchAddReq, pst,
380                                            mBuf);
381       }
382       break;
383
384 #endif
385       default:
386       {
387          RG_FREE_MSG(mBuf);
388          break;
389       }
390
391    }
392 }
393
394
395 \f
396 /**
397  * @brief Task Activation callback function. 
398  *
399  * @details
400  *
401  *     Function : rgActvTsk
402  *     
403  *     Primitives invoked by MAC's users/providers through
404  *     a loosely coupled interface arrive here by means of 
405  *     SSI's message handling. This API is registered with
406  *     SSI during the Task Registration of MAC.
407  *     
408  *  @param[in]  Pst     *pst, Post structure of the primitive.     
409  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
410  *  @param[in]  Reason reason.
411  *  @return  S16
412  *      -# ROK
413  **/
414 S16 rgActvTsk
415 (
416 Pst     *pst,                       /* post structure       */
417 Buffer  *mBuf                       /* message buffer       */
418 )
419 {
420    switch(pst->srcEnt)
421    {
422       /* The originator of this message is the stack manager,
423        * unpack and go to the respective primitive processing function */
424       case ENTDUAPP:
425           rgHdlSMEvents(pst, mBuf);
426            break;
427       case ENTNH:
428           rgHdlNHEvents(pst, mBuf);
429           break;
430       case ENTRLC:
431           rgHdlKWEvents(pst, mBuf);
432           break;
433       case ENTLWRMAC:
434           rgHdlTFEvents(pst, mBuf);
435           break;
436       case ENTMAC: /* When scheduler instance sends msg to MAC */
437           rgHdlRGEvents(pst, mBuf);
438           break;
439        default:
440           RG_FREE_MSG(mBuf);
441           break;
442    }
443    ODU_EXIT_TASK();
444    return ROK;
445 }/* end of rgActvTsk */
446
447 \f
448 /**********************************************************************
449  
450          End of file
451 **********************************************************************/