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 #include "common_def.h"
20 #include "du_app_mac_inf.h"
22 /**************************************************************************
23 * @brief Function to pack Loose Coupled
24 * MAC cell config parameters required by MAC
28 * Function : packMacCellCfg
31 * packs the macCellCfg parameters
33 * @param[in] Pst *pst, Post structure of the primitive.
34 * @param[in] MacCellCfg *macCellCfg, mac cell config parameters.
35 * @return ROK - success
38 ***************************************************************************/
39 uint8_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg)
41 if(pst->selector == ODU_SELECTOR_LC)
43 /* we are now implemented only light wieght lossely coupled interface */
46 else if(pst->selector == ODU_SELECTOR_LWLC)
50 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
55 /* pack the address of the structure */
56 CMCHKPK(oduPackPointer,(PTR)macCellCfg, mBuf);
58 DU_LOG("\nDEBUG --> DU-APP : MAC CELL config sent");
59 return ODU_POST_TASK(pst,mBuf);
64 /**************************************************************************
65 * @brief Function to pack Loose Coupled
66 * MAC cell config parameters required by MAC
70 * Function : unpackDuMacCellCfg
73 * packs the macCellCfg parameters
75 * @param[in] DuMacCellCfgReq func; function pointer
76 * @param[in] Pst *pst, Post structure of the primitive.
77 * @param[in] Buffer *mBuf
78 * @return ROK - success
81 ***************************************************************************/
82 uint8_t unpackDuMacCellCfg(DuMacCellCfgReq func, Pst *pst, Buffer *mBuf)
85 MacCellCfg *macCellCfg;
87 if(pst->selector == ODU_SELECTOR_LWLC)
89 /* unpack the address of the structure */
90 CMCHKUNPK(oduUnpackPointer, (PTR *)&macCellCfg, mBuf);
91 ret = (*func)(pst, macCellCfg);
95 /* only LWLC is implemented now */
102 /**************************************************************************
103 * @brief Function to pack Loose Coupled
104 * MAC cell config confirm message
108 * Function : packMacCellCfgCfm
111 * packs the transaction ID
113 * @param[in] Pst *pst, Post structure of the primitive.
114 * @param[in] MacCellCfgCfm *macCellCfgCfm, mac cell config confirm.
115 * @return ROK - success
118 ***************************************************************************/
119 uint8_t packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm)
121 if(pst->selector == ODU_SELECTOR_LC)
123 Buffer *mBuf = NULLP;
124 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
129 /* pack the transaction ID in CNF structure */
130 CMCHKPK(oduUnpackUInt16, macCellCfgCfm->cellId, mBuf);
131 CMCHKPK(oduUnpackUInt8, macCellCfgCfm->rsp, mBuf);
133 return ODU_POST_TASK(pst,mBuf);
135 else if(pst->selector == ODU_SELECTOR_LWLC)
137 /* only LC is supported */
143 /**************************************************************************
144 * @brief Function to pack MAC cell config confirm message
148 * Function : unpackMacCellCfgCfm
151 * packs the transaction ID
153 * @param[in] DuMacCellCfgCfm func; function pointer
154 * @param[in] Pst *pst, Post structure of the primitive.
155 * @param[in] Buffer *mBuf
156 * @return ROK - success
159 ***************************************************************************/
160 uint8_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf)
162 MacCellCfgCfm macCellCfgCfm;
164 if(pst->selector == ODU_SELECTOR_LC)
166 /* unpack the transaction ID in CNF structure */
167 CMCHKUNPK(oduPackUInt8, &(macCellCfgCfm.rsp), mBuf);
168 CMCHKUNPK(oduPackUInt16, &(macCellCfgCfm.cellId), mBuf);
169 return (*func)(pst, &macCellCfgCfm);
173 /* only loose coupling is suported */
178 /*******************************************************************
180 * @brief Packs and Send Cell Start Request to MAC
184 * Function : packMacCellStart
187 * Packs and Sends Cell Start Request to MAC
189 * @params[in] Post structure pointer
191 * @return ROK - success
194 * ****************************************************************/
195 uint8_t packMacCellStart(Pst *pst, OduCellId *cellId)
197 Buffer *mBuf = NULLP;
199 if(pst->selector == ODU_SELECTOR_LC)
201 /* Loose coupling not supported */
204 else if(pst->selector == ODU_SELECTOR_LWLC)
207 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
209 DU_LOG("\nERROR --> DU APP : Memory allocation failed for cell start req pack");
213 /* pack the address of the structure */
214 CMCHKPK(oduPackPointer,(PTR)cellId, mBuf);
217 return ODU_POST_TASK(pst,mBuf);
220 /*******************************************************************
222 * @brief Unpacks MAC Cell Start Request from DU APP
226 * Function : unpackMaCellStart
229 * Unpacks MAC Cell Start Request from DU APP
231 * @params[in] Function pointer of cell start request handler
232 * Post structure pointer
234 * @return ROK - success
237 * ****************************************************************/
238 uint8_t unpackMacCellStart(DuMacCellStart func, Pst *pst, Buffer *mBuf)
242 if(pst->selector == ODU_SELECTOR_LWLC)
244 /* unpack the address of the structure */
245 CMCHKUNPK(oduUnpackPointer, (PTR *)&cellId, mBuf);
246 ODU_PUT_MSG_BUF(mBuf);
247 return (*func)(pst, cellId);
251 /* Nothing to do for loose coupling */
252 ODU_PUT_MSG_BUF(mBuf);
257 /*******************************************************************
259 * @brief Packs and Send cell stop request to MAC
263 * Function : packMacCellStop
266 * Packs and Send cell stop request to MAC
268 * @params[in] Post structure pointer
270 * @return ROK - success
273 * ****************************************************************/
274 uint8_t packMacCellStop(Pst *pst, OduCellId *cellId)
276 if(pst->selector == ODU_SELECTOR_LC)
278 /* Loose coupling not supported */
281 else if(pst->selector == ODU_SELECTOR_LWLC)
283 Buffer *mBuf = NULLP;
285 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
287 DU_LOG("\nERROR --> DU APP : Memory allocation failed for cell stop req pack");
291 /* pack the address of the structure */
292 CMCHKPK(oduPackPointer,(PTR)cellId, mBuf);
294 return ODU_POST_TASK(pst,mBuf);
299 /*******************************************************************
301 * @brief Unpacks cell stop request from DU APP
305 * Function : unpackMaCellStop
308 * Unpacks cell stop request from DU APP
310 * @params[in] Handler function pointer
311 * Post structure pointer
313 * @return ROK - success
316 * ****************************************************************/
317 uint8_t unpackMacCellStop(DuMacCellStop func, Pst *pst, Buffer *mBuf)
321 if(pst->selector == ODU_SELECTOR_LWLC)
323 /* unpack the address of the structure */
324 CMCHKUNPK(oduUnpackPointer, (PTR *)&cellId, mBuf);
325 ODU_PUT_MSG_BUF(mBuf);
326 return (*func)(pst, cellId);
330 /* Nothing to do for loose coupling */
331 ODU_PUT_MSG_BUF(mBuf);
336 /*******************************************************************
338 * @brief Packs and Sends cell up ind from MAC to DUAPP
342 * Function : packMacCellUpInd
345 * Packs and Sends cell up ind from MAC to DUAPP
347 * @params[in] Post structure pointer
349 * @return ROK - success
352 * ****************************************************************/
353 uint8_t packMacCellUpInd(Pst *pst, OduCellId *cellId)
355 Buffer *mBuf = NULLP;
357 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
359 DU_LOG("\nERROR --> DU APP : Memory allocation failed for packMacCellUpInd");
363 if(pst->selector == ODU_SELECTOR_LC)
365 CMCHKPK(oduUnpackUInt16, cellId->cellId, mBuf);
366 CM_FREE_SHRABL_BUF(pst->region, pst->pool, cellId, sizeof(OduCellId));
369 else if(pst->selector == ODU_SELECTOR_LWLC)
371 /* pack the address of the structure */
372 CMCHKPK(oduPackPointer,(PTR)cellId, mBuf);
376 ODU_PUT_MSG_BUF(mBuf);
379 return ODU_POST_TASK(pst, mBuf);
382 /*******************************************************************
384 * @brief Unpacks cell up indication from MAC
388 * Function : unpackMacCellUpInd
391 * Unpacks cell up indication from MAC
393 * @params[in] Pointer to Handler
394 * Post structure pointer
396 * @return ROK - success
399 * ****************************************************************/
400 uint8_t unpackMacCellUpInd(DuMacCellUpInd func, Pst *pst, Buffer *mBuf)
402 if(pst->selector == ODU_SELECTOR_LWLC)
406 /* unpack the address of the structure */
407 CMCHKUNPK(oduUnpackPointer, (PTR *)&cellId, mBuf);
408 ODU_PUT_MSG_BUF(mBuf);
409 return (*func)(pst, cellId);
411 else if(pst->selector == ODU_SELECTOR_LC)
414 CMCHKUNPK(oduPackUInt16, &cellId.cellId, mBuf);
415 ODU_PUT_MSG_BUF(mBuf);
416 return (*func)(pst, &cellId);
420 /* Nothing to do for loose coupling */
421 ODU_PUT_MSG_BUF(mBuf);
427 /*******************************************************************
429 * @brief Packs and Sends stop ind from MAC to DUAPP
433 * Function : packMacStopInd
436 * Packs and Sends stop ind from MAC to DUAPP
438 * @params[in] Post structure pointer
439 * @return ROK - success
442 * ****************************************************************/
443 uint8_t packMacStopInd(Pst *pst, OduCellId *cellId)
445 Buffer *mBuf = NULLP;
447 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
449 DU_LOG("\nERROR --> DU APP : Memory allocation failed for stop Ind pack");
453 if(pst->selector == ODU_SELECTOR_LC)
455 /*pack the payload here*/
456 CMCHKPK(oduUnpackUInt16, cellId->cellId, mBuf);
457 CM_FREE_SHRABL_BUF(pst->region, pst->pool, cellId, sizeof(OduCellId));
460 else if(pst->selector == ODU_SELECTOR_LWLC)
462 /* pack the address of the structure */
463 CMCHKPK(oduPackPointer,(PTR)cellId, mBuf);
467 ODU_PUT_MSG_BUF(mBuf);
470 return ODU_POST_TASK(pst,mBuf);
473 /*******************************************************************
475 * @brief Unpacks stop indication from MAC
479 * Function : unpackMacStopInd
482 * Unpacks stop indication from MAC
484 * @params[in] Pointer to Handler
485 * Post structure pointer
487 * @return ROK - success
490 * ****************************************************************/
491 uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf)
493 if(pst->selector == ODU_SELECTOR_LWLC)
496 /* unpack the address of the structure */
497 CMCHKUNPK(oduUnpackPointer, (PTR *)&cellId, mBuf);
498 ODU_PUT_MSG_BUF(mBuf);
499 return (*func)(pst, cellId);
501 else if(pst->selector == ODU_SELECTOR_LC)
504 CMCHKUNPK(oduPackUInt16, &(cellId.cellId), mBuf);
506 ODU_PUT_MSG_BUF(mBuf);
507 return (*func)(pst, &cellId);
512 /* Nothing to do for loose coupling */
513 ODU_PUT_MSG_BUF(mBuf);
519 /*******************************************************************
521 * @brief Packs and Sends UL CCCH Ind from MAC to DUAPP
525 * Function : packMacUlCcchInd
528 * Packs and Sends UL CCCH Ind from MAC to DUAPP
530 * @params[in] Post structure pointer
531 * UL CCCH Ind pointer
532 * @return ROK - success
535 * ****************************************************************/
536 uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo)
538 Buffer *mBuf = NULLP;
540 if(pst->selector == ODU_SELECTOR_LWLC)
542 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
544 DU_LOG("\nERROR --> MAC : Memory allocation failed at packMacUlCcchInd");
547 /* pack the address of the structure */
548 CMCHKPK(oduPackPointer,(PTR)ulCcchIndInfo, mBuf);
552 DU_LOG("\nERROR --> MAC: Only LWLC supported for UL CCCH Ind ");
556 return ODU_POST_TASK(pst,mBuf);
559 /*******************************************************************
561 * @brief Unpacks UL CCCH indication from MAC
565 * Function : unpackMacUlCcchInd
568 * Unpacks UL CCCH indication from MAC
570 * @params[in] Pointer to Handler
571 * Post structure pointer
573 * @return ROK - success
576 * ****************************************************************/
577 uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf)
579 if(pst->selector == ODU_SELECTOR_LWLC)
581 UlCcchIndInfo *ulCcchIndInfo;
583 /* unpack the address of the structure */
584 CMCHKUNPK(oduUnpackPointer, (PTR *)&ulCcchIndInfo, mBuf);
585 ODU_PUT_MSG_BUF(mBuf);
586 return (*func)(pst, ulCcchIndInfo);
590 /* Nothing to do for other selectors */
591 DU_LOG("\nERROR --> MAC : Only LWLC supported for UL CCCH Ind ");
592 ODU_PUT_MSG_BUF(mBuf);
597 /*******************************************************************
599 * @brief Packs and Sends DL CCCH Ind from DUAPP to MAC
603 * Function : packMacDlCcchInd
606 * Packs and Sends DL CCCH Ind from DUAPP to MAC
609 * @params[in] Post structure pointer
610 * DL CCCH Ind pointer
611 * @return ROK - success
614 * ****************************************************************/
615 uint8_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo)
617 Buffer *mBuf = NULLP;
619 if(pst->selector == ODU_SELECTOR_LWLC)
621 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
623 DU_LOG("\nERROR --> MAC : Memory allocation failed at packMacDlCcchInd");
626 /* pack the address of the structure */
627 CMCHKPK(oduPackPointer,(PTR)dlCcchIndInfo, mBuf);
631 DU_LOG("\nERROR --> DU APP : Only LWLC supported for DL CCCH Ind ");
635 return ODU_POST_TASK(pst,mBuf);
638 /*******************************************************************
640 * @brief Unpacks DL CCCH indication from DU APP
644 * Function : unpackMacDlCcchInd
647 * Unpacks DL CCCH indication from DU APP
649 * @params[in] Pointer to Handler
650 * Post structure pointer
652 * @return ROK - success
655 * ****************************************************************/
656 uint8_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf)
658 if(pst->selector == ODU_SELECTOR_LWLC)
660 DlCcchIndInfo *dlCcchIndInfo;
662 /* unpack the address of the structure */
663 CMCHKUNPK(oduUnpackPointer, (PTR *)&dlCcchIndInfo, mBuf);
664 ODU_PUT_MSG_BUF(mBuf);
665 return (*func)(pst, dlCcchIndInfo);
669 /* Nothing to do for other selectors */
670 DU_LOG("\nERROR --> DU APP : Only LWLC supported for DL CCCH Ind ");
671 ODU_PUT_MSG_BUF(mBuf);
677 /*******************************************************************
679 * @brief Packs and Sends UE create Request from DUAPP to MAC
683 * Function : packDuMacUeCreateReq
686 * Packs and Sends UE Create Request from DUAPP to MAC
689 * @params[in] Post structure pointer
691 * @return ROK - success
694 * ****************************************************************/
695 uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCfg *ueCfg)
697 Buffer *mBuf = NULLP;
699 if(pst->selector == ODU_SELECTOR_LWLC)
701 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
703 DU_LOG("\nERROR --> MAC : Memory allocation failed at packDuMacUeCreateReq");
706 /* pack the address of the structure */
707 CMCHKPK(oduPackPointer,(PTR)ueCfg, mBuf);
711 DU_LOG("\nERROR --> MAC: Only LWLC supported for packDuMacUeCreateReq");
715 return ODU_POST_TASK(pst,mBuf);
718 /*******************************************************************
720 * @brief Unpacks UE Create Request received from DU APP
724 * Function : unpackMacUeCreateReq
727 * Unpacks UE Create Request received from DU APP
729 * @params[in] Pointer to Handler
730 * Post structure pointer
732 * @return ROK - success
735 * ****************************************************************/
736 uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf)
738 if(pst->selector == ODU_SELECTOR_LWLC)
742 /* unpack the address of the structure */
743 CMCHKUNPK(oduUnpackPointer, (PTR *)&ueCfg, mBuf);
744 ODU_PUT_MSG_BUF(mBuf);
745 return (*func)(pst, ueCfg);
749 /* Nothing to do for other selectors */
750 DU_LOG("\nERROR --> DU APP : Only LWLC supported for UE Create Request ");
751 ODU_PUT_MSG_BUF(mBuf);
757 /*******************************************************************
759 * @brief Pack and send UE config response from MAC to DU APP
763 * Function : packDuMacUeCfgRsp
766 * Pack and send UE config response from MAC to DU APP
769 * @return ROK - success
772 * ****************************************************************/
773 uint8_t packDuMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
775 Buffer *mBuf = NULLP;
777 if(pst->selector == ODU_SELECTOR_LWLC)
779 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
781 DU_LOG("\nERROR --> MAC : Memory allocation failed at packDuMacUeCfgRsp");
784 /* pack the address of the structure */
785 CMCHKPK(oduPackPointer,(PTR)cfgRsp, mBuf);
789 DU_LOG("\nERROR --> MAC: Only LWLC supported for packDuMacUeCfgRsp");
793 return ODU_POST_TASK(pst,mBuf);
796 /*******************************************************************
798 * @brief Unpack UE Config Response from MAC to DU APP
802 * Function : unpackDuMacUeCfgRsp
804 * Functionality: Unpack UE Config Response from MAC to DU APP
807 * @return ROK - success
810 * ****************************************************************/
811 uint8_t unpackDuMacUeCfgRsp(MacDuUeCfgRspFunc func, Pst *pst, Buffer *mBuf)
813 if(pst->selector == ODU_SELECTOR_LWLC)
815 MacUeCfgRsp *cfgRsp = NULLP;
817 /* unpack the address of the structure */
818 CMCHKUNPK(oduUnpackPointer, (PTR *)&cfgRsp, mBuf);
819 ODU_PUT_MSG_BUF(mBuf);
820 return (*func)(pst, cfgRsp);
823 ODU_PUT_MSG_BUF(mBuf);
827 /*******************************************************************
829 * @brief Packs and Sends UE Reconig Request from DUAPP to MAC
833 * Function : packDuMacUeReconfigReq
836 * Packs and Sends UE Reconfig Request from DUAPP to MAC
839 * @params[in] Post structure pointer
841 * @return ROK - success
844 * ****************************************************************/
845 uint8_t packDuMacUeReconfigReq(Pst *pst, MacUeCfg *ueCfg)
847 Buffer *mBuf = NULLP;
849 if(pst->selector == ODU_SELECTOR_LWLC)
851 if (ODU_GET_MSG_BUF(pst->region, pst->pool, &mBuf) != ROK)
853 DU_LOG("\nERROR --> MAC : Memory allocation failed at packDuMacUeReconfigReq");
856 /* pack the address of the structure */
857 CMCHKPK(oduPackPointer,(PTR)ueCfg, mBuf);
861 DU_LOG("\nERROR --> MAC: Only LWLC supported for packDuMacUeReconfigReq");
865 return ODU_POST_TASK(pst,mBuf);
867 /*******************************************************************
869 * @brief Unpacks UE Reconfig Request received from DU APP
873 * Function : unpackMacUeReconfigReq
876 * Unpacks UE Reconfig Request received from DU APP
878 * @params[in] Pointer to Handler
879 * Post structure pointer
881 * @return ROK - success
884 * ****************************************************************/
885 uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf)
887 if(pst->selector == ODU_SELECTOR_LWLC)
891 /* unpack the address of the structure */
892 CMCHKUNPK(oduUnpackPointer, (PTR *)&ueCfg, mBuf);
893 ODU_PUT_MSG_BUF(mBuf);
894 return (*func)(pst, ueCfg);
898 /* Nothing to do for other selectors */
899 DU_LOG("\nERROR --> DU APP : Only LWLC supported for UE Create Request ");
900 ODU_PUT_MSG_BUF(mBuf);
906 /**********************************************************************
908 **********************************************************************/