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 SSI Interface Implementation
27 File: mac_msg_router.c
29 **********************************************************************/
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.
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 */
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 #include "mac_sch_interface.h"
63 #include "mac_ue_mgr.h"
64 #include "mac_harq_dl.h"
67 * @brief Task Activation callback function Entity DU APP.
71 * Function : MacHdlDuappEvents
73 * Process Messages received from Entity DU APP
75 * @param[in] Pst *pst, Post structure of the primitive.
76 * @param[in] Buffer *mBuf, Packed primitive parameters in the buffer.
77 * @param[in] Reason reason.
80 void MacHdlDuappEvents(Pst *pst, Buffer *mBuf)
86 /* Process a config. request */
87 cmUnpkLrgCfgReq(RgMiLrgCfgReq, pst, mBuf);
89 case EVTMACSCHGENCFGREQ:
90 /* Process a config. request */
91 cmUnpkLrgSchCfgReq(MacSchGenCfgReq, pst, mBuf);
94 /* Process a statistics request */
95 cmUnpkLrgStsReq(RgMiLrgStsReq, pst, mBuf);
97 #endif /* LCRGMILRG */
98 case EVENT_MAC_CELL_CONFIG_REQ:
100 /* Process MAC cell config */
101 unpackDuMacCellCfg(MacProcCellCfgReq, pst, mBuf);
104 case EVENT_MAC_CELL_START:
106 /* Process MAC cell start request */
107 unpackMacCellStart(MacProcCellStart, pst, mBuf);
110 case EVENT_MAC_CELL_STOP:
112 /* Process MAC cell stop request */
113 unpackMacCellStop(MacProcCellStop, pst, mBuf);
116 case EVENT_MAC_DL_CCCH_IND:
118 /* Process DL CCCH Ind */
119 unpackMacDlCcchInd(MacProcDlCcchInd, pst, mBuf);
122 case EVENT_MAC_UE_CREATE_REQ:
124 /* Process Ue Create Request */
125 unpackMacUeCreateReq(MacProcUeCreateReq, pst, mBuf);
128 case EVENT_MAC_UE_RECONFIG_REQ:
130 /* Process Ue Reconfig Request */
131 unpackMacUeReconfigReq(MacProcUeReconfigReq, pst, mBuf);
134 case EVENT_MAC_UE_DELETE_REQ:
136 /* Process UE Delete Request */
137 unpackMacUeDeleteReq(MacProcUeDeleteReq, pst, mBuf);
140 case EVENT_MAC_CELL_DELETE_REQ:
142 /* Process Cell Delete Request */
143 unpackMacCellDeleteReq(MacProcCellDeleteReq, pst, mBuf);
146 case EVENT_MAC_SLICE_CFG_REQ:
148 /* Process Slice Configuration Request */
149 unpackMacSliceCfgReq(MacProcSliceCfgReq, pst, mBuf);
152 case EVENT_MAC_SLICE_RECFG_REQ:
154 /* Process Slice Reconfiguration Request */
155 unpackMacSliceRecfgReq(MacProcSliceRecfgReq, pst, mBuf);
158 case EVENT_MAC_RACH_RESOURCE_REQ:
160 /* Process Rach Resource Request */
161 unpackMacRachRsrcReq(MacProcRachRsrcReq, pst, mBuf);
164 case EVENT_MAC_RACH_RESOURCE_REL:
166 /* Process Rach Resource Release */
167 unpackMacRachRsrcRel(MacProcRachRsrcRel, pst, mBuf);
170 case EVENT_MAC_DL_PCCH_IND:
172 /* Process Pcch indication */
173 unpackMacDlPcchInd(MacProcDlPcchInd, pst, mBuf);
176 case EVENT_MAC_DL_BROADCAST_REQ:
178 /* Process Dl Broadcast Request */
179 unpackMacDlBroadcastReq(MacProcDlBroadcastReq, pst, mBuf);
183 case EVENT_MAC_UE_RESET_REQ:
185 /* Process UE Reset Request */
186 unpackMacUeResetReq(MacProcUeResetReq, pst, mBuf);
190 case EVENT_MAC_STATISTICS_REQ:
192 /* Process Statistics Request */
193 unpackMacStatsReq(MacProcStatsReq, pst, mBuf);
197 case EVENT_MAC_STATS_DELETE_REQ:
199 /* Process Statistics Delete Request */
200 unpackMacStatsDeleteReq(MacProcStatsDeleteReq, pst, mBuf);
203 case EVENT_MAC_STATISTICS_MODIFY_REQ:
205 /* Process Statistics modification Request */
206 unpackMacStatsModificationReq(MacProcStatsModificationReq, pst, mBuf);
218 * @brief Task Activation callback function Entity RLC.
222 * Function : MacHdlRlcEvents
224 * Process Messages received from Entity RLC
226 * @param[in] Pst *pst, Post structure of the primitive.
227 * @param[in] Buffer *mBuf, Packed primitive parameters in the buffer.
228 * @param[in] Reason reason.
231 void MacHdlRlcEvents(Pst *pst, Buffer *mBuf)
236 cmUnpkRguBndReq(RgUiRguBndReq, pst, mBuf);
239 cmUnpkRguUbndReq(RgUiRguUbndReq, pst, mBuf);
241 case EVENT_DL_DATA_TO_MAC:
242 unpackRlcDlData(MacProcRlcDlData, pst, mBuf);
244 case EVENT_BO_STATUS_TO_MAC:
245 unpackRlcBoStatus(MacProcRlcBoStatus, pst, mBuf);
254 * @brief Task Activation callback function Entity Lower MAC
258 * Function : MacHdlLwrMacEvents
260 * Process Messages received from Entity Lower MAC
262 * @param[in] Pst *pst, Post structure of the primitive.
263 * @param[in] Buffer *mBuf, Packed primitive parameters in the buffer.
264 * @param[in] Reason reason.
267 void MacHdlLwrMacEvents(Pst *pst, Buffer *mBuf)
271 case EVENT_SLOT_IND_TO_MAC:
272 unpackSlotInd(fapiMacSlotInd, pst, mBuf);
274 case EVENT_STOP_IND_TO_MAC:
275 unpackStopInd(fapiMacStopInd, pst, mBuf);
277 case EVENT_RACH_IND_TO_MAC:
278 unpackRachInd(fapiMacRachInd, pst, mBuf);
280 case EVENT_CRC_IND_TO_MAC:
281 unpackCrcInd(fapiMacCrcInd, pst, mBuf);
283 case EVENT_RX_DATA_IND_TO_MAC:
284 unpackRxDataInd(fapiMacRxDataInd, pst, mBuf);
286 case EVENT_UCI_IND_TO_MAC:
287 unpackUciInd(FapiMacUciInd, pst, mBuf);
295 #ifdef CALL_FLOW_DEBUG_LOG
297 * @brief Function prints src, dest, msg infor about all the msgs that received.
301 * Function : callFlowMacActvTsk
303 * Function prints src, dest, msg infor about all the msgs that received
305 * @param[in] Pst *pst, Post structure of the primitive.
310 void callFlowMacActvTsk(Pst *pst)
313 char destTask[50]="ENTMAC";
320 strcpy(sourceTask,"ENTDUAPP");
325 strcpy(message,"EVTLRGCFGREQ");
327 case EVTMACSCHGENCFGREQ:
328 strcpy(message,"EVTMACSCHGENCFGREQ");
330 #endif /* LCRGMILRG */
331 case EVENT_MAC_CELL_CONFIG_REQ:
332 strcpy(message,"EVENT_MAC_CELL_CONFIG_REQ");
334 case EVENT_MAC_CELL_START:
335 strcpy(message,"EVENT_MAC_CELL_START");
337 case EVENT_MAC_CELL_STOP:
338 strcpy(message,"EVENT_MAC_CELL_STOP");
340 case EVENT_MAC_DL_CCCH_IND:
341 strcpy(message,"EVENT_MAC_DL_CCCH_IND");
343 case EVENT_MAC_UE_CREATE_REQ:
344 strcpy(message,"EVENT_MAC_UE_CREATE_REQ");
346 case EVENT_MAC_UE_RECONFIG_REQ:
347 strcpy(message,"EVENT_MAC_UE_RECONFIG_REQ");
349 case EVENT_MAC_UE_DELETE_REQ:
350 strcpy(message,"EVENT_MAC_UE_DELETE_REQ");
352 case EVENT_MAC_CELL_DELETE_REQ:
353 strcpy(message,"EVENT_MAC_CELL_DELETE_REQ");
355 case EVENT_MAC_SLICE_CFG_REQ:
356 strcpy(message,"EVENT_MAC_SLICE_CFG_REQ");
358 case EVENT_MAC_SLICE_RECFG_REQ:
359 strcpy(message,"EVENT_MAC_SLICE_RECFG_REQ");
361 case EVENT_MAC_STATISTICS_REQ:
362 strcpy(message,"EVENT_MAC_STATISTICS_REQ");
364 case EVENT_MAC_STATS_DELETE_REQ:
365 strcpy(message,"EVENT_MAC_STATS_DELETE_REQ");
367 case EVENT_MAC_STATISTICS_MODIFY_REQ:
368 strcpy(message,"EVENT_MAC_STATISTICS_MODIFY_REQ");
371 strcpy(message,"Invalid Event");
378 strcpy(sourceTask,"ENTRLC");
383 strcpy(message,"EVTRGUBNDREQ");
386 strcpy(message,"EVTRGUUBNDREQ");
388 case EVENT_DL_DATA_TO_MAC:
389 strcpy(message,"EVENT_DL_DATA_TO_MAC");
391 case EVENT_BO_STATUS_TO_MAC:
392 strcpy(message,"EVENT_BO_STATUS_TO_MAC");
396 strcpy(message,"Invalid Event");
404 strcpy(sourceTask,"ENTLWRMAC");
407 case EVENT_SLOT_IND_TO_MAC:
408 strcpy(message,"EVENT_SLOT_IND_TO_MAC");
410 case EVENT_STOP_IND_TO_MAC:
411 strcpy(message,"EVENT_STOP_IND_TO_MAC");
413 case EVENT_RACH_IND_TO_MAC:
414 strcpy(message,"EVENT_RACH_IND_TO_MAC");
416 case EVENT_CRC_IND_TO_MAC:
417 strcpy(message,"EVENT_CRC_IND_TO_MAC");
419 case EVENT_RX_DATA_IND_TO_MAC:
420 strcpy(message,"EVENT_RX_DATA_IND_TO_MAC");
422 case EVENT_UCI_IND_TO_MAC:
423 strcpy(message,"EVENT_UCI_IND_TO_MAC");
426 strcpy(message,"Invalid Event");
434 if(pst->srcInst == 1)
436 strcpy(sourceTask,"ENTSCH");
439 case EVENT_SLICE_CFG_RSP_TO_MAC:
441 strcpy(message,"EVENT_SLICE_CFG_RSP_TO_MAC");
444 case EVENT_SLICE_RECFG_RSP_TO_MAC:
446 strcpy(message,"EVENT_SLICE_RECFG_RSP_TO_MAC");
449 case EVENT_SCH_CELL_CFG_CFM:
451 strcpy(message,"EVENT_SCH_CELL_CFG_CFM");
454 case EVENT_UE_CONFIG_RSP_TO_MAC:
456 strcpy(message,"EVENT_UE_CONFIG_RSP_TO_MAC");
459 case EVENT_UE_RECONFIG_RSP_TO_MAC:
461 strcpy(message,"EVENT_UE_RECONFIG_RSP_TO_MAC");
464 case EVENT_DL_SCH_INFO:
466 strcpy(message,"EVENT_DL_SCH_INFO");
469 case EVENT_UL_SCH_INFO:
471 strcpy(message,"EVENT_UL_SCH_INFO");
474 case EVENT_RACH_RESOURCE_RESPONSE_TO_MAC:
476 strcpy(message,"EVENT_RACH_RESOURCE_RESPONSE_TO_MAC");
479 case EVENT_DL_PAGING_ALLOC:
481 strcpy(message,"EVENT_DL_PAGING_ALLOC");
484 case EVENT_UE_DELETE_RSP_TO_MAC:
486 strcpy(message,"EVENT_UE_DELETE_RSP_TO_MAC");
489 case EVENT_CELL_DELETE_RSP_TO_MAC:
491 strcpy(message,"EVENT_CELL_DELETE_RSP_TO_MAC");
494 case EVENT_DL_REL_HQ_PROC:
496 strcpy(message,"EVENT_DL_REL_HQ_PROC");
499 case EVENT_STATISTICS_RSP_TO_MAC:
501 strcpy(message,"EVENT_STATISTICS_RSP_TO_MAC");
504 case EVENT_STATISTICS_IND_TO_MAC:
506 strcpy(message,"EVENT_STATISTICS_IND_TO_MAC");
509 case EVENT_STATISTICS_DELETE_RSP_TO_MAC:
511 strcpy(message,"EVENT_STATISTICS_DELETE_RSP_TO_MAC");
514 case EVENT_STATISTICS_MODIFY_RSP_TO_MAC:
516 strcpy(message,"EVENT_STATISTICS_MODIFY_RSP_TO_MAC");
520 strcpy(message,"Invalid Event");
528 strcpy(sourceTask,"Invalid Source Entity Id");
532 DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
538 * @brief Task Activation callback function.
542 * Function : macActvTsk
544 * Primitives invoked by MAC's users/providers through
545 * a loosely coupled interface arrive here by means of
546 * SSI's message handling. This API is registered with
547 * SSI during the Task Registration of MAC.
549 * @param[in] Pst *pst, Post structure of the primitive.
550 * @param[in] Buffer *mBuf, Packed primitive parameters in the buffer.
551 * @param[in] Reason reason.
555 uint8_t macActvTsk(Pst *pst, Buffer *mBuf)
558 #ifdef CALL_FLOW_DEBUG_LOG
559 callFlowMacActvTsk(pst);
565 MacHdlDuappEvents(pst, mBuf);
568 MacHdlRlcEvents(pst, mBuf);
571 MacHdlLwrMacEvents(pst, mBuf);
579 }/* end of MacActvTsk */
582 * @brief Callback function for events from entity SCH
586 * Function :MacMessageRouter
588 * Process Messages received from Entity SCH
590 * @param[in] Pst *pst, Post structure of the primitive.
591 * @param[in] Buffer *mBuf, Packed primitive parameters in the buffer.
592 * @param[in] Reason reason.
595 uint8_t MacMessageRouter(Pst *pst, void *msg)
597 #ifdef CALL_FLOW_DEBUG_LOG
598 callFlowMacActvTsk(pst);
603 case EVENT_SLICE_CFG_RSP_TO_MAC:
605 MacProcSchSliceCfgRsp(pst, (SchSliceCfgRsp *)msg);
608 case EVENT_SLICE_RECFG_RSP_TO_MAC:
610 MacProcSchSliceRecfgRsp(pst, (SchSliceRecfgRsp *)msg);
613 case EVENT_SCH_CELL_CFG_CFM:
615 MacProcSchCellCfgCfm(pst, (SchCellCfgCfm *)msg);
618 case EVENT_UE_CONFIG_RSP_TO_MAC:
620 MacProcSchUeCfgRsp(pst, (SchUeCfgRsp *)msg);
623 case EVENT_UE_RECONFIG_RSP_TO_MAC:
625 MacProcSchUeRecfgRsp(pst, (SchUeRecfgRsp *)msg);
628 case EVENT_DL_SCH_INFO:
630 MacProcDlAlloc(pst, (DlSchedInfo *)msg);
633 case EVENT_UL_SCH_INFO:
635 MacProcUlSchInfo(pst, (UlSchedInfo *)msg);
638 case EVENT_RACH_RESOURCE_RESPONSE_TO_MAC:
640 MacProcSchRachRsrcRsp(pst, (SchRachRsrcRsp *)msg);
643 case EVENT_DL_PAGING_ALLOC:
645 MacProcDlPageAlloc(pst, (DlPageAlloc *)msg);
648 case EVENT_UE_DELETE_RSP_TO_MAC:
650 MacProcSchUeDeleteRsp(pst, (SchUeDeleteRsp *)msg);
653 case EVENT_CELL_DELETE_RSP_TO_MAC:
655 MacProcSchCellDeleteRsp(pst, (SchCellDeleteRsp *)msg);
658 case EVENT_DL_REL_HQ_PROC:
660 MacSchReleaseDlHarqProc(pst, (SchRlsHqInfo *)msg);
663 case EVENT_STATISTICS_RSP_TO_MAC:
665 MacProcSchStatsRsp(pst, (SchStatsRsp *)msg);
668 case EVENT_STATISTICS_IND_TO_MAC:
670 MacProcSchStatsInd(pst, (SchStatsInd *)msg);
673 case EVENT_STATISTICS_DELETE_RSP_TO_MAC:
675 MacProcSchStatsDeleteRsp(pst, (SchStatsDeleteRsp *)msg);
678 case EVENT_STATISTICS_MODIFY_RSP_TO_MAC:
680 MacProcSchStatsModificationRsp(pst, (SchStatsModificationRsp *)msg);
692 /**********************************************************************
695 **********************************************************************/