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 packing/unpacking of RGU interface
30 **********************************************************************/
33 @brief This file contains the packing/unpacking code for the RGU interface
37 /* header include files (.h) */
38 #include "common_def.h"
39 #include "rgu.h" /* RGU Interface defines */
41 /* header/extern include files (.x) */
42 #include "rgu.x" /* RGU Interface includes */
53 * @brief Request from RLC to MAC to bind the interface saps
57 * Function : cmPkRguBndReq
60 * @param[in] SuId suId
61 * @param[in] SpId spId
74 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
75 #if (ERRCLASS & ERRCLS_ADD_RES)
76 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
77 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
78 (ErrVal)ERGU001, (ErrVal)0, "Packing failed");
82 if (SPkS16(spId, mBuf) != ROK) {
83 #if (ERRCLASS & ERRCLS_ADD_RES)
84 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
85 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
86 (ErrVal)ERGU002, (ErrVal)0, "Packing failed");
91 if (SPkS16(suId, mBuf) != ROK) {
92 #if (ERRCLASS & ERRCLS_ADD_RES)
93 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
94 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
95 (ErrVal)ERGU003, (ErrVal)0, "Packing failed");
100 pst->event = (Event) EVTRGUBNDREQ;
101 return (SPstTsk(pst,mBuf));
106 * @brief Request from RLC to MAC to bind the interface saps
110 * Function : cmUnpkRguBndReq
112 * @param[in] Pst* pst
113 * @param[in] SuId suId
114 * @param[in] SpId spId
128 if (SUnpkS16(&suId, mBuf) != ROK) {
129 #if (ERRCLASS & ERRCLS_ADD_RES)
130 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
131 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
132 (ErrVal)ERGU004, (ErrVal)0, "UnPacking failed");
137 if (SUnpkS16(&spId, mBuf) != ROK) {
138 #if (ERRCLASS & ERRCLS_ADD_RES)
139 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
140 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
141 (ErrVal)ERGU005, (ErrVal)0, "UnPacking failed");
147 return ((*func)(pst, suId, spId));
152 * @brief Request from RLC to MAC to Unbind the interface saps
156 * Function : cmPkRguUbndReq
158 * @param[in] Pst* pst
159 * @param[in] SpId spId
160 * @param[in] Reason reason
171 Buffer *mBuf = NULLP;
173 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
174 #if (ERRCLASS & ERRCLS_ADD_RES)
175 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
176 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
177 (ErrVal)ERGU006, (ErrVal)0, "Packing failed");
181 if (SPkS16(reason, mBuf) != ROK) {
182 #if (ERRCLASS & ERRCLS_ADD_RES)
183 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
184 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
185 (ErrVal)ERGU007, (ErrVal)0, "Packing failed");
190 if (SPkS16(spId, mBuf) != ROK) {
191 #if (ERRCLASS & ERRCLS_ADD_RES)
192 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
193 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
194 (ErrVal)ERGU008, (ErrVal)0, "Packing failed");
199 pst->event = (Event) EVTRGUUBNDREQ;
200 return (SPstTsk(pst,mBuf));
205 * @brief Request from RLC to MAC to Unbind the interface saps
209 * Function : cmUnpkRguUbndReq
211 * @param[in] Pst* pst
212 * @param[in] SpId spId
213 * @param[in] Reason reason
228 if (SUnpkS16(&spId, mBuf) != ROK) {
229 #if (ERRCLASS & ERRCLS_ADD_RES)
230 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
231 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
232 (ErrVal)ERGU009, (ErrVal)0, "UnPacking failed");
237 if (SUnpkS16(&reason, mBuf) != ROK) {
238 #if (ERRCLASS & ERRCLS_ADD_RES)
239 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
240 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
241 (ErrVal)ERGU010, (ErrVal)0, "UnPacking failed");
247 return ((*func)(pst, spId, reason));
252 * @brief Confirmation from MAC to RLC for the bind/Unbind
253 * request for the interface saps
257 * Function : cmPkRguBndCfm
259 * @param[in] Pst* pst
260 * @param[in] SuId suId
261 * @param[in] uint8_t status
272 Buffer *mBuf = NULLP;
274 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
275 #if (ERRCLASS & ERRCLS_ADD_RES)
276 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
277 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
278 (ErrVal)ERGU011, (ErrVal)0, "Packing failed");
282 if (oduUnpackUInt8(status, mBuf) != ROK) {
283 #if (ERRCLASS & ERRCLS_ADD_RES)
284 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
285 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
286 (ErrVal)ERGU012, (ErrVal)0, "Packing failed");
291 if (SPkS16(suId, mBuf) != ROK) {
292 #if (ERRCLASS & ERRCLS_ADD_RES)
293 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
294 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
295 (ErrVal)ERGU013, (ErrVal)0, "Packing failed");
300 pst->event = (Event) EVTRGUBNDCFM;
301 return (SPstTsk(pst,mBuf));
306 * @brief Confirmation from MAC to RLC for the bind/Unbind
307 * request for the interface saps
311 * Function : cmUnpkRguBndCfm
313 * @param[in] Pst* pst
314 * @param[in] SuId suId
315 * @param[in] uint8_t status
329 if (SUnpkS16(&suId, mBuf) != ROK) {
330 #if (ERRCLASS & ERRCLS_ADD_RES)
331 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
332 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
333 (ErrVal)ERGU014, (ErrVal)0, "UnPacking failed");
338 if (oduPackUInt8(&status, mBuf) != ROK) {
339 #if (ERRCLASS & ERRCLS_ADD_RES)
340 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
341 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
342 (ErrVal)ERGU015, (ErrVal)0, "UnPacking failed");
348 return ((*func)(pst, suId, status));
351 /*rgu_c_001.main_5 - ADD - L2M & R9 Support */
354 /***********************************************************
356 * Func :cmPkRguL2MUlThrpMeasReqInfo
359 * Status Response from RLC to MAC on UL dedicated logical channel for Uplink
360 * Scheduled throughput measurement
369 **********************************************************/
370 S16 cmPkRguL2MUlThrpMeasReqInfo
372 RguL2MUlThrpMeasReqInfo* param,
378 CMCHKPK(oduUnpackUInt8, param->enbMeas, mBuf);
379 for (loop=param->numLcId-1; loop >= 0; loop--)
381 CMCHKPK(oduUnpackUInt8, param->lcId[loop], mBuf);
383 CMCHKPK(cmPkLteLcId, param->numLcId, mBuf);
384 CMCHKPK(cmPkLteRnti, param->rnti, mBuf);
385 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
391 /***********************************************************
393 * Func :cmUnpkRguL2MUlThrpMeasReqInfo
396 * Status Response from RLC to MAC on UL dedicated logical channel for Uplink
397 * Scheduled throughput measurement
406 **********************************************************/
407 S16 cmUnpkRguL2MUlThrpMeasReqInfo
409 RguL2MUlThrpMeasReqInfo *param,
415 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
416 CMCHKUNPK(cmUnpkLteRnti, ¶m->rnti, mBuf);
417 CMCHKUNPK(cmUnpkLteLcId, ¶m->numLcId, mBuf);
418 for (loop=0; loop<param->numLcId; loop++)
420 CMCHKUNPK(oduPackUInt8, ¶m->lcId[loop], mBuf);
422 CMCHKUNPK(oduPackUInt8, ¶m->enbMeas, mBuf);
427 * @brief Primitive invoked from RLC to MAC to
428 * inform the On/Off status for Scheduled UL throughput
429 * measurment for dedicated channels
433 * Function :cmPkRguL2MUlThrpMeasReq
435 * @param[in] Pst* pst
436 * @param[in] SpId spId
437 * @param[in] RguL2MUlThrpMeasReqInfo* measReq
441 S16 cmPkRguL2MUlThrpMeasReq
445 RguL2MUlThrpMeasReqInfo* measReq
448 Buffer *mBuf = NULLP;
450 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
451 #if (ERRCLASS & ERRCLS_ADD_RES)
452 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
453 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
454 (ErrVal)ERGU049, (ErrVal)0, "Packing failed");
456 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)measReq, sizeof(RguL2MUlThrpMeasReqInfo));
459 if (pst->selector == ODU_SELECTOR_LWLC)
461 CMCHKPK(oduPackPointer,(PTR) measReq, mBuf);
465 if (cmPkRguL2MUlThrpMeasReqInfo(measReq, mBuf) != ROK) {
466 #if (ERRCLASS & ERRCLS_ADD_RES)
467 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
468 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
469 (ErrVal)ERGU050, (ErrVal)0, "Packing failed");
471 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)measReq,
472 sizeof(RguL2MUlThrpMeasReqInfo));
476 if (SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)measReq,
477 sizeof(RguL2MUlThrpMeasReqInfo)) != ROK) {
478 #if (ERRCLASS & ERRCLS_ADD_RES)
479 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
480 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
481 (ErrVal)ERGU052, (ErrVal)0, "Packing failed");
489 if (SPkS16(spId, mBuf) != ROK) {
490 #if (ERRCLASS & ERRCLS_ADD_RES)
491 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
492 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
493 (ErrVal)ERGU051, (ErrVal)0, "Packing failed");
495 if (measReq != NULLP)
497 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)measReq,
498 sizeof(RguL2MUlThrpMeasReqInfo));
504 pst->event = (Event) EVTRGUL2MULTHRPMEASREQ;
505 return (SPstTsk(pst,mBuf));
510 * @brief Primitive invoked from RLC to MAC to
511 * inform the On/Off status for Scheduled UL throughput
512 * measurment for dedicated channels
516 * Function :cmUnpkRguL2MUlThrpMeasReq
518 * @param[in] Pst* pst
519 * @param[in] SpId spId
520 * @param[in] RguL2MUlThrpMeasReqInfo * measReq
524 S16 cmUnpkRguL2MUlThrpMeasReq
526 RguL2MUlThrpMeasReq func,
532 RguL2MUlThrpMeasReqInfo* measReq;
535 if (SUnpkS16(&spId, mBuf) != ROK) {
536 #if (ERRCLASS & ERRCLS_ADD_RES)
537 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
538 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
539 (ErrVal)ERGU053, (ErrVal)0, "UnPacking failed");
544 if (pst->selector == ODU_SELECTOR_LWLC)
546 CMCHKUNPK(oduUnpackPointer,(PTR *) &measReq, mBuf);
550 if ((SGetSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data **)&measReq,
551 sizeof(RguL2MUlThrpMeasReqInfo))) != ROK) {
552 #if (ERRCLASS & ERRCLS_ADD_RES)
553 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
554 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
555 (ErrVal)ERGU054, (ErrVal)0, "UnPacking failed");
560 if (cmUnpkRguL2MUlThrpMeasReqInfo(measReq, mBuf) != ROK) {
561 #if (ERRCLASS & ERRCLS_ADD_RES)
562 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
563 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
564 (ErrVal)ERGU055, (ErrVal)0, "UnPacking failed");
567 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)measReq,
568 sizeof(RguL2MUlThrpMeasReqInfo));
573 return ((*func)(pst, spId, measReq));
579 /*rgu_c_001.main_5 - ADD - L2M Support */
583 * @brief Harq Status Indication from MAC to RLC
587 * Function : cmPkRguHqStaInd
589 * @param[in] Pst* pst
590 * @param[in] SuId suId
591 * @param[in] RguHarqStatusInd *harqStatusInd
599 RguHarqStatusInd *harqStatusInd
605 RguHarqStatusInd *harqStaInd = NULL;
607 #ifdef XEON_SPECIFIC_CHANGES
608 if (SGetSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data **)&harqStaInd, sizeof(RguHarqStatusInd)) != ROK)
610 if ((SGetStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool,
611 (Data **)&harqStaInd, sizeof(RguHarqStatusInd),0)) != ROK)
614 #if (ERRCLASS & ERRCLS_ADD_RES)
615 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
616 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
617 (ErrVal)ERGU070, (ErrVal)0, "Packing failed");
622 memcpy(harqStaInd, harqStatusInd, sizeof(RguHarqStatusInd));
624 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
625 #if (ERRCLASS & ERRCLS_ADD_RES)
626 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
627 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
628 (ErrVal)ERGU070, (ErrVal)0, "Packing failed");
630 #ifdef XEON_SPECIFIC_CHANGES
631 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd, sizeof(RguHarqStatusInd));
633 SPutStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd, sizeof(RguHarqStatusInd), 0);
638 if (pst->selector == ODU_SELECTOR_LWLC)
640 CMCHKPK(oduPackPointer,(PTR) harqStaInd, mBuf);
644 for(idx = 0; idx < harqStaInd->numTbs; idx++)
646 CMCHKPK(oduUnpackUInt16, harqStaInd->status[idx], mBuf);
648 for(idx = 0; idx < harqStaInd->numTbs; idx++)
650 CMCHKPK(oduUnpackUInt32, harqStaInd->tbId[idx], mBuf);
652 CMCHKPK(oduUnpackUInt8, harqStaInd->numTbs, mBuf);
653 CMCHKPK(cmPkLteRnti, harqStaInd->ueId, mBuf);
654 CMCHKPK(cmPkLteCellId, harqStaInd->cellId, mBuf);
656 if (SPkS16(suId, mBuf) != ROK) {
657 #if (ERRCLASS & ERRCLS_ADD_RES)
658 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
659 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
660 (ErrVal)ERGU071, (ErrVal)0, "Packing failed");
662 #ifdef XEON_SPECIFIC_CHANGES
663 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd,
664 sizeof(RguHarqStatusInd));
666 SPutStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd, sizeof(RguHarqStatusInd), 0);
671 #ifdef XEON_SPECIFIC_CHANGES
672 if (SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd,
673 sizeof(RguHarqStatusInd)) != ROK) {
675 if (pst->selector != ODU_SELECTOR_LWLC)
677 if(SPutStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)harqStaInd,
678 sizeof(RguHarqStatusInd), 0) != ROK)
681 #if (ERRCLASS & ERRCLS_ADD_RES)
682 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
683 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
684 (ErrVal)ERGU072, (ErrVal)0, "Packing failed");
689 #ifndef XEON_SPECIFIC_CHANGES
693 pst->event = (Event) EVTRGUHQSTAIND;
694 return (SPstTsk(pst,mBuf));
699 * @brief Harq Status Indication from MAC to RLC
703 * Function : cmUnpkRguHqStaInd
705 * @param[in] RguHqStaInd func
706 * @param[in] Pst *pst
707 * @param[in] Buffer *mBuf
711 S16 cmUnpkRguHqStaInd
718 RguHarqStatusInd *hqStaInd;
722 if (SUnpkS16(&suId, mBuf) != ROK) {
723 #if (ERRCLASS & ERRCLS_ADD_RES)
724 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
725 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
726 (ErrVal)ERGU073, (ErrVal)0, "UnPacking failed");
731 #ifdef XEON_SPECIFIC_CHANGES
732 if ((SGetSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data **)&hqStaInd,
733 sizeof(RguHarqStatusInd))) != ROK) {
735 if (pst->selector == ODU_SELECTOR_LWLC)
737 CMCHKUNPK(oduUnpackPointer,(PTR *) &hqStaInd, mBuf);
741 if ((SGetStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool,
742 (Data **)&hqStaInd, sizeof(RguHarqStatusInd),0)) != ROK)
745 #if (ERRCLASS & ERRCLS_ADD_RES)
746 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
747 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
748 (ErrVal)ERGU074, (ErrVal)0, "UnPacking failed");
753 CMCHKUNPK(cmUnpkLteCellId, &hqStaInd->cellId, mBuf);
754 CMCHKUNPK(cmUnpkLteRnti, &hqStaInd->ueId, mBuf);
755 CMCHKUNPK(oduPackUInt8, &hqStaInd->numTbs, mBuf);
756 for(idx = hqStaInd->numTbs; idx > 0; idx--)
758 CMCHKUNPK(oduPackUInt32, &hqStaInd->tbId[idx - 1], mBuf);
760 for(idx = hqStaInd->numTbs; idx > 0; idx--)
762 CMCHKUNPK(oduPackUInt16, &hqStaInd->status[idx - 1], mBuf);
764 #ifndef XEON_SPECIFIC_CHANGES
768 (*func)(pst, suId, hqStaInd);
769 #ifdef XEON_SPECIFIC_CHANGES
770 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)hqStaInd, sizeof(RguHarqStatusInd));
772 SPutStaticBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)hqStaInd, sizeof(RguHarqStatusInd), 0);
776 #endif /* LTE_L2_MEAS */
778 S16 cmPkRguLcFlowCntrlInfo
780 RguLcFlowCntrlInfo *param,
784 CMCHKPK(oduUnpackUInt32, param->maxBo4FlowCtrl, mBuf);
785 CMCHKPK(oduUnpackUInt32, param->pktAdmitCnt, mBuf);
786 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
791 S16 cmPkRguUeFlowCntrlInfo
793 RguUeFlowCntrlInfo *param,
800 for(idx=(param->numLcs - 1); idx >= 0; idx--)
802 cmPkRguLcFlowCntrlInfo(¶m->lcInfo[idx],mBuf);
804 CMCHKPK(oduUnpackUInt32, param->numLcs, mBuf);
805 CMCHKPK(cmPkLteRnti, param->ueId, mBuf);
809 S16 cmPkRguFlowCntrlInfo
811 RguFlowCntrlInd *param,
817 for (idx=(param->numUes - 1); idx >= 0; idx--)
819 cmPkRguUeFlowCntrlInfo(¶m->ueFlowCntrlInfo[idx],mBuf);
821 CMCHKPK(oduUnpackUInt32, param->numUes, mBuf);
822 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
827 * @brief Flow Cntrl Indication from MAC to RLC
828 * Informs RLC of the LCs on which flow control
833 * Function : cmPkRguFlowCntrlInd
835 * @param[in] Pst* pst
836 * @param[in] SuId suId
837 * @param[in] RguFlowCntrlInd *staInd
841 S16 cmPkRguFlowCntrlInd
845 RguFlowCntrlInd *flowCntrlInd
848 Buffer *mBuf = NULLP;
850 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
851 #if (ERRCLASS & ERRCLS_ADD_RES)
852 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
853 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
854 (ErrVal)ERGU076, (ErrVal)0, "Packing failed");
858 if (pst->selector == ODU_SELECTOR_LWLC)
860 CMCHKPK(oduPackPointer,(PTR) flowCntrlInd, mBuf);
864 if (cmPkRguFlowCntrlInfo(flowCntrlInd, mBuf) != ROK) {
865 #if (ERRCLASS & ERRCLS_ADD_RES)
866 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
867 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
868 (ErrVal)ERGU077, (ErrVal)0, "Packing failed");
874 if (SPkS16(suId, mBuf) != ROK) {
875 #if (ERRCLASS & ERRCLS_ADD_RES)
876 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
877 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
878 (ErrVal)ERGU078, (ErrVal)0, "Packing failed");
884 pst->event = (Event) EVTRGUFLOWCNTRLIND;
885 return (SPstTsk(pst,mBuf));
888 S16 cmUnpkRguLcFlowCntrlInfo
890 RguLcFlowCntrlInfo *param,
895 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
896 CMCHKUNPK(oduPackUInt32, ¶m->pktAdmitCnt, mBuf);
897 CMCHKUNPK(oduPackUInt32, ¶m->maxBo4FlowCtrl, mBuf);
901 S16 cmUnpkRguUeFlowCntrlInfo
903 RguUeFlowCntrlInfo *param,
908 CMCHKUNPK(cmUnpkLteRnti, ¶m->ueId, mBuf);
909 CMCHKUNPK(oduPackUInt32, ¶m->numLcs, mBuf);
910 for(idx=0; idx < param->numLcs; idx++)
912 cmUnpkRguLcFlowCntrlInfo(¶m->lcInfo[idx],mBuf);
917 S16 cmUnpkRguFlowCntrlInfo
919 RguFlowCntrlInd *param,
926 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
927 CMCHKUNPK(oduPackUInt32, ¶m->numUes, mBuf);
928 for (idx=0; idx < param->numUes; idx++)
930 cmUnpkRguUeFlowCntrlInfo(¶m->ueFlowCntrlInfo[idx],mBuf);
936 * @brief Flow control indication from MAC to RLC
937 * Informs RLC of the LCs on which flow control to
942 * Function : cmUnpkRguFlowCntrlInd
944 * @param[in] RguFlowCntrlInd func
945 * @param[in] Pst *pst
946 * @param[in] Buffer *mBuf
950 S16 cmUnpkRguFlowCntrlInd
952 RguFlowCntrlIndInfo func,
958 RguFlowCntrlInd *flowCntrlInd;
960 if (SUnpkS16(&suId, mBuf) != ROK) {
961 #if (ERRCLASS & ERRCLS_ADD_RES)
962 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
963 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
964 (ErrVal)ERGU080, (ErrVal)0, "UnPacking failed");
969 if (pst->selector == ODU_SELECTOR_LWLC)
971 CMCHKUNPK(oduUnpackPointer,(PTR *) &flowCntrlInd, mBuf);
975 if ((SGetSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data **)&flowCntrlInd, sizeof(RguFlowCntrlInd))) != ROK) {
976 #if (ERRCLASS & ERRCLS_ADD_RES)
977 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
978 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
979 (ErrVal)ERGU081, (ErrVal)0, "UnPacking failed");
984 if (cmUnpkRguFlowCntrlInfo(flowCntrlInd, mBuf) != ROK) {
985 #if (ERRCLASS & ERRCLS_ADD_RES)
986 SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
987 __FILE__, __LINE__, (ErrCls)ERRCLS_ADD_RES,
988 (ErrVal)ERGU082, (ErrVal)0, "UnPacking failed");
991 SPutSBufNewForDebug(__FILE__,__FUNCTION__,__LINE__,pst->region, pst->pool, (Data *)flowCntrlInd, sizeof(RguFlowCntrlInd));
996 return ((*func)(pst, suId, flowCntrlInd));
999 /***********************************************************
1001 * Func : cmPkRguPduInfo
1005 * PDU information given on a logical channel
1014 **********************************************************/
1023 for (i=param->numPdu-1; i >= 0; i--) {
1024 /* rgu_c_001.main_3: ccpu00111328: S16 is renamed as MsgLen */
1026 if (SFndLenMsg(param->mBuf[i], &msgLen) != ROK)
1028 if (SCatMsg(mBuf, param->mBuf[i], M1M2) != ROK)
1030 SPutMsg(param->mBuf[i]);
1031 CMCHKPK(cmPkMsgLen, msgLen, mBuf);
1033 CMCHKPK(oduUnpackUInt8, param->numPdu, mBuf);
1039 /***********************************************************
1041 * Func : cmUnpkRguPduInfo
1045 * PDU information given on a logical channel
1054 **********************************************************/
1055 S16 cmUnpkRguPduInfo
1064 CMCHKUNPK(oduPackUInt8, ¶m->numPdu, mBuf);
1065 for (i=0; i<param->numPdu; i++) {
1066 MsgLen msgLen, totalMsgLen;
1067 CMCHKUNPK(cmUnpkMsgLen, &msgLen, mBuf);
1068 if (SFndLenMsg(mBuf, &totalMsgLen) != ROK)
1070 if (SSegMsg(mBuf, totalMsgLen-msgLen, ¶m->mBuf[i]) != ROK)
1078 /***********************************************************
1080 * Func : cmPkRguDBoReport
1083 * Desc : RguDBoReport
1084 * Buffer Occupancy Report for dedicated logical channel
1093 **********************************************************/
1094 S16 cmPkRguDBoReport
1096 RguDBoReport *param,
1101 CMCHKPK(oduUnpackUInt32, param->oldestSduArrTime, mBuf);
1102 CMCHKPK(oduUnpackUInt32, param->staPduBo, mBuf);
1104 CMCHKPK(oduUnpackUInt8, param->staPduPrsnt, mBuf);
1105 CMCHKPK(oduUnpackUInt16, param->estRlcHdrSz, mBuf);
1107 CMCHKPK(SPkS32, param->bo, mBuf);
1113 /***********************************************************
1115 * Func : cmUnpkRguDBoReport
1118 * Desc : RguDBoReport
1119 * Buffer Occupancy Report for dedicated logical channel
1128 **********************************************************/
1129 S16 cmUnpkRguDBoReport
1131 RguDBoReport *param,
1137 CMCHKUNPK(SUnpkS32, ¶m->bo, mBuf);
1139 CMCHKUNPK(oduPackUInt16, ¶m->estRlcHdrSz, mBuf);
1140 CMCHKUNPK(oduPackUInt8, ¶m->staPduPrsnt, mBuf);
1143 CMCHKUNPK(oduPackUInt32, ¶m->staPduBo, mBuf);
1144 CMCHKUNPK(oduPackUInt32, ¶m->oldestSduArrTime, mBuf);
1149 /***********************************************************
1151 * Func : cmPkRguCDatReqInfo
1154 * Desc : RguCDatReqInfo
1155 * DatReq from RLC to MAC for Common Channels(BCCH, PCCH and CCCH)
1164 **********************************************************/
1165 S16 cmPkRguCDatReqInfo
1167 RguCDatReqInfo *param,
1173 if (param->pdu != NULLP)
1175 if (SFndLenMsg(param->pdu, &msgLen) != ROK)
1177 if (SCatMsg(mBuf, param->pdu, M1M2) != ROK)
1179 SPutMsg(param->pdu);
1180 CMCHKPK(cmPkMsgLen, msgLen, mBuf);
1182 switch(param->lcType) {
1183 case CM_LTE_LCH_CCCH:
1184 CMCHKPK(cmPkLteRnti, param->u.rnti, mBuf);
1186 case CM_LTE_LCH_BCCH:
1187 case CM_LTE_LCH_PCCH:
1188 CMCHKPK(cmPkLteTimingInfo, ¶m->u.timeToTx, mBuf);
1190 CMCHKPK(oduUnpackUInt8,param->pnb,mBuf);
1196 CMCHKPK(oduUnpackUInt32, param->transId, mBuf);
1197 CMCHKPK(cmPkLteLcType, param->lcType, mBuf);
1198 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1199 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
1205 /***********************************************************
1207 * Func : cmUnpkRguCDatReqInfo
1210 * Desc : RguCDatReqInfo
1211 * DatReq from RLC to MAC for Common Channels(BCCH, PCCH and CCCH)
1220 **********************************************************/
1221 S16 cmUnpkRguCDatReqInfo
1223 RguCDatReqInfo *param,
1227 MsgLen msgLen, totalMsgLen;
1230 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
1231 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1232 CMCHKUNPK(cmUnpkLteLcType, ¶m->lcType, mBuf);
1233 CMCHKUNPK(oduPackUInt32, ¶m->transId, mBuf);
1234 switch(param->lcType) {
1235 case CM_LTE_LCH_BCCH:
1236 case CM_LTE_LCH_PCCH:
1238 CMCHKUNPK(oduPackUInt8,¶m->pnb, mBuf);
1240 CMCHKUNPK(cmUnpkLteTimingInfo, ¶m->u.timeToTx, mBuf);
1242 case CM_LTE_LCH_CCCH:
1243 CMCHKUNPK(cmUnpkLteRnti, ¶m->u.rnti, mBuf);
1248 SFndLenMsg(mBuf, &msgLen);
1251 CMCHKUNPK(cmUnpkMsgLen, &msgLen, mBuf);
1252 if (SFndLenMsg(mBuf, &totalMsgLen) != ROK)
1254 if (SSegMsg(mBuf, totalMsgLen-msgLen, ¶m->pdu) != ROK)
1262 /***********************************************************
1264 * Func : cmPkRguLchDatReq
1267 * Desc : RguLchDatReq
1268 * DatReq Information of a logical channel
1277 **********************************************************/
1278 S16 cmPkRguLchDatReq
1280 RguLchDatReq *param,
1286 CMCHKPK(oduUnpackUInt8, param->freeBuff, mBuf);
1288 CMCHKPK(oduUnpackUInt8, param->setMaxUlPrio, mBuf);
1289 CMCHKPK(cmPkRguPduInfo, ¶m->pdu, mBuf);
1290 CMCHKPK(cmPkRguDBoReport, ¶m->boReport, mBuf);
1291 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1297 /***********************************************************
1299 * Func : cmUnpkRguLchDatReq
1302 * Desc : RguLchDatReq
1303 * DatReq Information of a logical channel
1312 **********************************************************/
1313 S16 cmUnpkRguLchDatReq
1315 RguLchDatReq *param,
1320 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1321 CMCHKUNPK(cmUnpkRguDBoReport, ¶m->boReport, mBuf);
1322 CMCHKUNPK(cmUnpkRguPduInfo, ¶m->pdu, mBuf);
1323 CMCHKUNPK(oduPackUInt8, ¶m->setMaxUlPrio, mBuf);
1325 CMCHKUNPK(oduPackUInt8, ¶m->freeBuff, mBuf);
1331 /***********************************************************
1333 * Func : cmPkRguDatReqTb
1336 * Desc : RguDatReqTb
1337 * DatReq from RLC to MAC for dedicated channels of a UE
1346 **********************************************************/
1355 /*rgu_c_001.main_5 - ADD - L2M Support */
1357 CMCHKPK(oduUnpackUInt32, param->tbId, mBuf);
1359 for (i=param->nmbLch-1; i >= 0; i--) {
1360 CMCHKPK(cmPkRguLchDatReq, ¶m->lchData[i], mBuf);
1362 CMCHKPK(oduUnpackUInt8, param->nmbLch, mBuf);
1368 /***********************************************************
1370 * Func : cmUnpkRguDatReqTb
1373 * Desc : RguDatReqTb
1374 * DatReq from RLC to MAC for dedicated channels of a UE
1383 **********************************************************/
1385 S16 cmUnpkRguDatReqTb
1392 S16 cmUnpkRguDatReqTb
1402 CMCHKUNPK(oduPackUInt8, ¶m->nmbLch, mBuf);
1403 for (i=0; i<param->nmbLch; i++) {
1404 CMCHKUNPK(cmUnpkRguLchDatReq, ¶m->lchData[i], mBuf);
1406 /*rgu_c_001.main_5 - ADD - L2M Support */
1408 CMCHKUNPK(oduPackUInt32, ¶m->tbId, mBuf);
1414 /***********************************************************
1416 * Func : cmPkRguDDatReqInfo
1419 * Desc : RguDDatReqInfo
1420 * DatReq from RLC to MAC for dedicated channels of a UE
1429 **********************************************************/
1430 /*rgu_c_001.main_5 - ADD - L2M Support */
1432 S16 cmPkRguDDatReqInfo
1435 RguDDatReqInfo *param,
1439 S16 cmPkRguDDatReqInfo
1441 RguDDatReqInfo *param,
1450 for(idx = (param->nmbOfUeGrantPerTti-1); idx >= 0; idx--)
1452 RguDDatReqPerUe *datReq = ¶m->datReq[idx];
1453 for (i=RGU_MAX_TB-1; i >= 0; i--)
1455 CMCHKPK(cmPkRguDatReqTb, &datReq->datReqTb[i], mBuf);
1457 CMCHKPK(oduUnpackUInt8, datReq->nmbOfTbs, mBuf);
1458 CMCHKPK(oduUnpackUInt32, datReq->transId, mBuf);
1459 CMCHKPK(cmPkLteRnti, datReq->rnti, mBuf);
1461 CMCHKPK(oduUnpackUInt8, param->nmbOfUeGrantPerTti, mBuf);
1462 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
1468 /***********************************************************
1470 * Func : cmUnpkRguDDatReqInfo
1473 * Desc : RguDDatReqInfo
1474 * DatReq from RLC to MAC for dedicated channels of a UE
1483 **********************************************************/
1485 S16 cmUnpkRguDDatReqInfo
1488 RguDDatReqInfo *param,
1492 S16 cmUnpkRguDDatReqInfo
1494 RguDDatReqInfo *param,
1500 /* After Merging from 2.1 to 2.2 */
1501 /*rgu_c_001.main_5 - ADD - L2M Support */
1508 /* After Merging from 2.1 to 2.2 */
1509 /*rgu_c_001.main_5 - ADD - L2M Support */
1513 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
1514 CMCHKUNPK(oduPackUInt8, ¶m->nmbOfUeGrantPerTti, mBuf);
1515 for(idx = 0; idx < param->nmbOfUeGrantPerTti; idx++)
1517 RguDDatReqPerUe *datReq = ¶m->datReq[idx];
1518 CMCHKUNPK(cmUnpkLteRnti, &datReq->rnti, mBuf);
1519 CMCHKUNPK(oduPackUInt32, &datReq->transId, mBuf);
1520 CMCHKUNPK(oduPackUInt8, &datReq->nmbOfTbs, mBuf);
1521 /* rgu_c_001.main_4 - Changes for MIMO feature addition */
1522 for (i=0; i<RGU_MAX_TB; i++)
1524 /*rgu_c_001.main_5 - ADD - L2M Support */
1526 /* After Merging from 2.1 to 2.2 */
1527 retVal = cmUnpkRguDatReqTb(pst, &datReq->datReqTb[i], mBuf);
1533 CMCHKUNPK(cmUnpkRguDatReqTb, &datReq->datReqTb[i], mBuf);
1542 /***********************************************************
1544 * Func : cmPkRguCDatIndInfo
1547 * Desc : RguCDatIndInfo
1548 * DatInd from MAC to RLC on CCCH
1557 **********************************************************/
1558 S16 cmPkRguCDatIndInfo
1560 RguCDatIndInfo *param,
1566 if (SFndLenMsg(param->pdu, &msgLen) != ROK)
1568 if (SCatMsg(mBuf, param->pdu, M1M2) != ROK)
1570 SPutMsg(param->pdu);
1571 CMCHKPK(cmPkMsgLen, msgLen, mBuf);
1572 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1573 CMCHKPK(cmPkLteRnti, param->rnti, mBuf);
1574 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
1580 /***********************************************************
1582 * Func : cmUnpkRguCDatIndInfo
1585 * Desc : RguCDatIndInfo
1586 * DatInd from MAC to RLC on CCCH
1595 **********************************************************/
1596 S16 cmUnpkRguCDatIndInfo
1598 RguCDatIndInfo *param,
1602 MsgLen msgLen, totalMsgLen;
1605 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
1606 CMCHKUNPK(cmUnpkLteRnti, ¶m->rnti, mBuf);
1607 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1608 CMCHKUNPK(cmUnpkMsgLen, &msgLen, mBuf);
1609 if (SFndLenMsg(mBuf, &totalMsgLen) != ROK)
1611 if (SSegMsg(mBuf, totalMsgLen-msgLen, ¶m->pdu) != ROK)
1618 /***********************************************************
1620 * Func : cmPkRguLchDatInd
1623 * Desc : RguLchDatInd
1624 * DatInd Information for a logical channel
1633 **********************************************************/
1634 S16 cmPkRguLchDatInd
1636 RguLchDatInd *param,
1641 CMCHKPK(cmPkRguPduInfo, ¶m->pdu, mBuf);
1642 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1648 /***********************************************************
1650 * Func : cmUnpkRguLchDatInd
1653 * Desc : RguLchDatInd
1654 * DatInd Information for a logical channel
1663 **********************************************************/
1664 S16 cmUnpkRguLchDatInd
1666 RguLchDatInd *param,
1671 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1672 CMCHKUNPK(cmUnpkRguPduInfo, ¶m->pdu, mBuf);
1677 /***********************************************************
1679 * Func : cmPkRguCStaRspInfo
1682 * Desc : RguCStaRspInfo
1683 * Status Response from RLC to MAC for common logical channel
1692 **********************************************************/
1693 S16 cmPkRguCStaRspInfo
1695 RguCStaRspInfo *param,
1701 switch(param->lcType) {
1702 case CM_LTE_LCH_CCCH:
1703 CMCHKPK(cmPkLteRnti, param->u.rnti, mBuf);
1705 case CM_LTE_LCH_BCCH:
1706 case CM_LTE_LCH_PCCH:
1707 CMCHKPK(cmPkLteTimingInfo, ¶m->u.timeToTx, mBuf);
1709 CMCHKPK(oduUnpackUInt8,param->pnb,mBuf);
1710 CMCHKPK(oduUnpackUInt8,param->emtcDiReason,mBuf);
1716 CMCHKPK(SPkS32, param->bo, mBuf);
1717 CMCHKPK(cmPkLteLcType, param->lcType, mBuf);
1718 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1719 CMCHKPK(cmPkLteCellId, param->cellId, mBuf);
1725 /***********************************************************
1727 * Func : cmUnpkRguCStaRspInfo
1730 * Desc : RguCStaRspInfo
1731 * Status Response from RLC to MAC for common logical channel
1740 **********************************************************/
1741 S16 cmUnpkRguCStaRspInfo
1743 RguCStaRspInfo *param,
1749 CMCHKUNPK(cmUnpkLteCellId, ¶m->cellId, mBuf);
1750 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1751 CMCHKUNPK(cmUnpkLteLcType, ¶m->lcType, mBuf);
1752 CMCHKUNPK(SUnpkS32, ¶m->bo, mBuf);
1753 switch(param->lcType) {
1754 case CM_LTE_LCH_BCCH:
1755 case CM_LTE_LCH_PCCH:
1757 CMCHKUNPK(oduPackUInt8,¶m->emtcDiReason , mBuf);
1758 CMCHKUNPK(oduPackUInt8,¶m->pnb , mBuf);
1760 CMCHKUNPK(cmUnpkLteTimingInfo, ¶m->u.timeToTx, mBuf);
1762 case CM_LTE_LCH_CCCH:
1763 CMCHKUNPK(cmUnpkLteRnti, ¶m->u.rnti, mBuf);
1772 /***********************************************************
1774 * Func : cmPkRguLchStaInd
1777 * Desc : RguLchStaInd
1778 * StaInd info for each logical channel of a UE
1787 **********************************************************/
1788 S16 cmPkRguLchStaInd
1790 RguLchStaInd *param,
1796 CMCHKPK(SPkS16, param->totBufSize, mBuf);
1797 CMCHKPK(cmPkLteLcId, param->lcId, mBuf);
1803 /***********************************************************
1805 * Func : cmUnpkRguLchStaInd
1808 * Desc : RguLchStaInd
1809 * StaInd info for each logical channel of a UE
1818 **********************************************************/
1819 S16 cmUnpkRguLchStaInd
1821 RguLchStaInd *param,
1826 CMCHKUNPK(cmUnpkLteLcId, ¶m->lcId, mBuf);
1827 CMCHKUNPK(SUnpkS16, ¶m->totBufSize, mBuf);
1832 /***********************************************************
1834 * Func : cmPkRguStaIndTb
1837 * Desc : RguStaIndTb
1838 * StaInd from RLC to MAC for dedicated channels of a UE
1847 **********************************************************/
1858 CMCHKPK(oduUnpackUInt16, param->status, mBuf);
1859 CMCHKPK(oduUnpackUInt32, param->tbId, mBuf);
1861 for (i=param->nmbLch-1; i >= 0; i--) {
1862 CMCHKPK(cmPkRguLchStaInd, ¶m->lchStaInd[i], mBuf);
1864 CMCHKPK(oduUnpackUInt8, param->nmbLch, mBuf);
1870 /***********************************************************
1872 * Func : cmUnpkRguStaIndTb
1875 * Desc : RguStaIndTb
1876 * StaInd from RLC to MAC for dedicated channels of a UE
1885 **********************************************************/
1886 S16 cmUnpkRguStaIndTb
1894 CMCHKUNPK(oduPackUInt8, ¶m->nmbLch, mBuf);
1895 for (i=0; i<param->nmbLch; i++) {
1896 CMCHKUNPK(cmUnpkRguLchStaInd, ¶m->lchStaInd[i], mBuf);
1899 CMCHKUNPK(oduPackUInt32, ¶m->tbId, mBuf);
1900 CMCHKUNPK(oduPackUInt16, ¶m->status, mBuf);
1907 /**********************************************************************
1909 **********************************************************************/