--- /dev/null
+/*******************************************************************************
+################################################################################
+# Copyright (c) [2017-2019] [Radisys] #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); #
+# you may not use this file except in compliance with the License. #
+# You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+################################################################################
+*******************************************************************************/
+
+/********************************************************************20**
+
+ Name: RLC service user (PDCP) lower interface
+
+ Type: C file
+
+ Desc: This file Contains the RLC service user lower interface
+ primitive implementain
+
+ File: pj_ptli.c
+
+*********************************************************************21*/
+\f
+/* header (.h) include files */
+#include "envopt.h" /* environment options */
+#include "envdep.h" /* environment dependent */
+#include "envind.h" /* environment independent */
+
+#include "gen.h" /* general */
+#include "ssi.h" /* system services */
+#include "cm5.h" /* common timer defines */
+#include "cm_tkns.h" /* common tokens defines */
+#include "cm_mblk.h" /* common memory allocation library defines */
+#include "cm_llist.h" /* common link list defines */
+#include "cm_hash.h" /* common hash list defines */
+#include "cm_lte.h" /* common LTE defines */
+#include "kwu.h" /* KWU defines */
+#include "pj_err.h"
+
+/* extern (.x) include files */
+#include "gen.x" /* general */
+#include "ssi.x" /* system services */
+//#if defined(PDCP_RLC_DL_RBUF)
+#include "ss_rbuf.h"
+#include "ss_rbuf.x"
+#include "kwu.h" /* PJU */
+#include "ss_queue.h"
+#include "ss_queue.x"
+#include "ss_task.h"
+#include "ss_task.x"
+#include "ss_timer.x" /* System services */
+#include "ss_msg.h" /* System services */
+#include "ss_msg.x" /* System services */
+#include "ss_mem.h" /* System services */
+#include "ss_mem.x" /* System services */
+#include "ss_drvr.x"
+#include "ss_gen.h"
+#include "ss_gen.x"
+//#endif
+
+#include "cm5.x" /* common timer library */
+#include "cm_tkns.x" /* common tokens */
+#include "cm_mblk.x" /* common memory allocation */
+#include "cm_llist.x" /* common link list */
+#include "cm_hash.x" /* common hash list */
+#include "cm_lte.x" /* common LTE includes */
+#include "cm_lib.x" /* common memory allocation library */
+#include "kwu.x" /* KWU */
+
+
+PUBLIC U8 SUpdMbufMemInfo (Pst *pst,Buffer *mBuf);
+#if defined(PDCP_RLC_DL_RBUF) && !defined(SS_RBUF)
+PUBLIC S16 pjKwuRbufDatReq(Pst * pst,SpId spId,KwuDatReqInfo* datReq,Buffer * mBuf);
+#endif
+
+EXTERN S16 PtLiKwuBndReq ARGS ((
+Pst *post,
+SuId suId,
+SpId spId
+));
+
+EXTERN S16 PtLiKwuUbndReq ARGS ((
+Pst *post,
+SpId spId,
+Reason reason
+));
+
+EXTERN S16 PtLiKwuDiscSduReq ARGS ((
+Pst *post,
+SpId spId,
+KwuDiscSduInfo *discSdu
+));
+
+EXTERN S16 PtLiKwuDatReq ARGS ((
+Pst *post,
+SpId spId,
+KwuDatReqInfo *datReq,
+Buffer *mBuf
+));
+\f
+/************************************************************************
+ KWU Interface Matrices
+************************************************************************/
+
+PUBLIC KwuBndReq pjLiKwuBndReqMt [] =
+{
+#ifdef LCKWUIKWU
+ cmPkKwuBndReq, /* 0 - loosely coupled */
+#else
+ PtLiKwuBndReq, /* 0 - loosely coupled, portable */
+#endif
+#ifdef KW
+ KwUiKwuBndReq, /* 1 - tightly coupled, stub layer */
+#else
+ PtLiKwuBndReq, /* 1 - tightly coupled, portable */
+#endif
+#ifdef LWLCKWUIKWU
+ cmPkKwuBndReq, /* 3 - light weight loosely coupled */
+#else
+ PtLiKwuBndReq, /* 3 - light weight loosely coupled, portable */
+#endif
+};
+
+PUBLIC KwuUbndReq pjLiKwuUbndReqMt [] =
+{
+#ifdef LCKWUIKWU
+ cmPkKwuUbndReq, /* 0 - loosely coupled */
+#else
+ PtLiKwuUbndReq, /* 0 - loosely coupled, portable */
+#endif
+#ifdef KW
+ KwUiKwuUbndReq, /* 1 - tightly coupled, stub layer */
+#else
+ PtLiKwuUbndReq, /* 1 - tightly coupled, portable */
+#endif
+#ifdef LWLCKWUIKWU
+ cmPkKwuUbndReq, /* 3 - light weight loosely coupled */
+#else
+ PtLiKwuUbndReq, /* 3 - light weight loosely coupled, portable */
+#endif
+};
+
+PUBLIC KwuDatReq pjLiKwuDatReqMt [] =
+{
+#ifdef LCKWUIKWU
+ cmPkKwuDatReq, /* 0 - loosely coupled */
+#else
+ PtLiKwuDatReq, /* 0 - loosely coupled, portable */
+#endif
+#ifdef KW
+ KwUiKwuDatReq, /* 1 - tightly coupled, stub layer */
+#else
+ PtLiKwuDatReq, /* 1 - tightly coupled, portable */
+#endif
+#ifdef LWLCKWUIKWU
+ cmPkKwuDatReq, /* 3 - light weight loosely coupled */
+#else
+ PtLiKwuDatReq, /* 3 - light weight loosely coupled, portable */
+#endif
+};
+
+PUBLIC KwuDiscSduReq pjLiKwuDiscSduReqMt [] =
+{
+#ifdef LCKWUIKWU
+ cmPkKwuDiscSduReq, /* 0 - loosely coupled */
+#else
+ PtLiKwuDiscSduReq, /* 0 - loosely coupled, portable */
+#endif
+#ifdef KW
+ KwUiKwuDiscSduReq, /* 1 - tightly coupled, stub layer */
+#else
+ PtLiKwuDiscSduReq, /* 1 - tightly coupled, portable */
+#endif
+#ifdef LWLCKWUIKWU
+ cmPkKwuDiscSduReq, /* 3 - light weight loosely coupled */
+#else
+ PtLiKwuDiscSduReq, /* 3 - light weight loosely coupled, portable */
+#endif
+};
+
+\f
+/****************************************************************************
+ * KWU Interface Mt functions
+ ***************************************************************************/
+/**
+ *
+ * @brief
+ *
+ * PjLiKwuBndReq - KWU SAP bind Request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] suId - Service user SAP ID
+ * @param[in] spId - Service provider ID
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PjLiKwuBndReq
+(
+Pst *pst, /* post structure */
+SuId suId, /* Service User Id */
+SpId spId /* Service Provider Id */
+)
+#else
+PUBLIC S16 PjLiKwuBndReq(pst, suId, spId)
+Pst *pst; /* post structure */
+SuId suId; /* Service User Id */
+SpId spId; /* Service Provider Id */
+#endif
+{
+ TRC3(PjLiKwuBndReq)
+
+ /* jump to specific primitive depending on configured selector */
+ (*pjLiKwuBndReqMt[pst->selector])(pst, suId, spId);
+
+ RETVALUE(ROK);
+
+} /* end of PjLiKwuBndReq */
+
+\f
+/**
+ *
+ * @brief
+ *
+ * PjLiKwuUbndReq - KWU SAP unbind Request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] spId - Service provider SAP ID
+ * @param[in] reason - Reason
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PjLiKwuUbndReq
+(
+Pst *pst,
+SpId spId,
+Reason reason
+)
+#else
+PUBLIC S16 PjLiKwuUbndReq(pst, spId, reason)
+Pst *pst;
+SpId spId;
+Reason reason;
+#endif
+{
+ TRC3(PjLiKwuUbndReq)
+
+ /* jump to specific primitive depending on configured selector */
+ (*pjLiKwuUbndReqMt[pst->selector])(pst, spId, reason);
+
+ RETVALUE(ROK);
+
+} /* end of PjLiKwuUbndReq */
+
+\f
+/**
+ *
+ * @brief
+ *
+ * PjLiKwuDatReq - KWU Data Request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] spId - Service provider SAP ID
+ * @param[in] datReq - Data Request
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PjLiKwuDatReq
+(
+Pst *pst,
+SpId spId,
+KwuDatReqInfo *datReq,
+Buffer *mBuf
+)
+#else
+PUBLIC S16 PjLiKwuDatReq(pst, spId, datReq, mBuf)
+Pst *pst;
+SpId spId;
+KwuDatReqInfo *datReq;
+Buffer *mBuf;
+#endif
+{
+ S16 ret = ROK;
+
+ TRC3(PjLiKwuDatReq)
+#if defined(PDCP_RLC_DL_RBUF) && !defined(SS_RBUF)
+ if(datReq->lcType == CM_LTE_LCH_DTCH)
+ {
+ if((pjKwuRbufDatReq(pst,spId, datReq, mBuf)) != ROK)
+ {
+ /* Posting the message as ring buffer write failure */
+ ret = RFAILED;
+ }
+ }
+ else
+#endif
+ {
+ /* jump to specific primitive depending on configured selector */
+ ret = (*pjLiKwuDatReqMt[pst->selector])(pst, spId, datReq, mBuf);
+ }
+ RETVALUE(ret);
+
+} /* end of PjLiKwuDatReq */
+
+\f
+/**
+ *
+ * @brief
+ *
+ * PjLiKwuDiscSduReq - KWU Discard SDU Request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] spId - Service provider SAP ID
+ * @param[in] datReq - Data Request
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PjLiKwuDiscSduReq
+(
+Pst *pst,
+SpId spId,
+KwuDiscSduInfo *discSdu
+)
+#else
+PUBLIC S16 PjLiKwuDiscSduReq(pst, spId, discSdu)
+Pst *pst;
+SpId spId;
+KwuDiscSduInfo *discSdu;
+#endif
+{
+ TRC3(PjLiKwuDiscSduReq)
+
+ /* jump to specific primitive depending on configured selector */
+ (*pjLiKwuDiscSduReqMt[pst->selector])(pst, spId, discSdu);
+
+ RETVALUE(ROK);
+
+} /* end of PjLiKwuDiscSduReq */
+
+/****************************************************************************
+ * Porting Functions
+ ***************************************************************************/
+/**
+ *
+ * @brief
+ *
+ * PtLiKwuBndReq - portable bind request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] suId - Service user SAP ID
+ * @param[in] spId - Service provider ID
+ *
+ * @return S16
+ * -# ROK
+ */
+
+#ifdef ANSI
+PUBLIC S16 PtLiKwuBndReq
+(
+Pst *post,
+SuId suId,
+SpId spId
+)
+#else
+PUBLIC S16 PtLiKwuBndReq(post, suId, spId)
+Pst *post;
+SuId suId;
+SpId spId;
+#endif /* ANSI */
+{
+ TRC3(PtLiKwuBndReq)
+#if (ERRCLASS & ERRCLS_DEBUG)
+ /* S16 ret1; */
+ SLogError(post->srcEnt, post->srcInst, post->srcProcId,
+ __FILE__, __LINE__, (ErrCls)ERRCLS_DEBUG,
+ (ErrVal)EPJXXX, (ErrVal)ERRZERO, "Improper selector for NhLiKwuBndReq\n");
+ RETVALUE( RFAILED );
+#endif /* (ERRCLASS & ERRCLS_DEBUG) */
+ UNUSED(post);
+ UNUSED(suId);
+ UNUSED(spId);
+
+ RETVALUE(ROK);
+} /* end of PtLiKwuBndReq() */
+
+\f
+/**
+ *
+ * @brief
+ *
+ * PtLiKwuUbndReq - portable unbind request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] suId - Service provider SAP ID
+ * @param[in] reason - Reason
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PtLiKwuUbndReq
+(
+Pst *post,
+SpId spId,
+Reason reason
+)
+#else
+PUBLIC S16 PtLiKwuUbndReq(post, spId, reason)
+Pst *post;
+SpId spId;
+Reason reason;
+#endif /* ANSI */
+{
+ TRC3(PtLiKwuUbndReq)
+#if (ERRCLASS & ERRCLS_DEBUG)
+ /* S16 ret1; */
+ SLogError(post->srcEnt, post->srcInst, post->srcProcId,
+ __FILE__, __LINE__, (ErrCls)ERRCLS_DEBUG,
+ (ErrVal)EPJXXX, (ErrVal)ERRZERO, "Improper selector for NhLiKwuUbndReq\n");
+ RETVALUE( RFAILED );
+#endif /* (ERRCLASS & ERRCLS_DEBUG) */
+ UNUSED(post);
+ UNUSED(spId);
+ UNUSED(reason);
+
+ RETVALUE(ROK);
+} /* end of PtLiKwuUbndReq() */
+
+/**
+ *
+ * @brief
+ *
+ * PtLiKwuDiscSduReq - portable discard SDU request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] spId - Service provider SAP ID
+ * @param[in] datReq - Data Request
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PtLiKwuDiscSduReq
+(
+Pst *post,
+SpId spId,
+KwuDiscSduInfo *discSdu
+)
+#else
+PUBLIC S16 PtLiKwuDiscSduReq(post, spId, discSdu)
+Pst *post;
+SpId spId;
+KwuDiscSduInfo *discSdu;
+#endif /* ANSI */
+{
+ TRC3(PtLiKwuDiscSduReq)
+#if (ERRCLASS & ERRCLS_DEBUG)
+ /* S16 ret1; */
+ SLogError(post->srcEnt, post->srcInst, post->srcProcId,
+ __FILE__, __LINE__, (ErrCls)ERRCLS_DEBUG,
+ (ErrVal)EKWU010, (ErrVal)ERRZERO, "Improper selector for NhLiKwuDiscSduReq\n");
+ RETVALUE( RFAILED );
+
+#endif /* (ERRCLASS & ERRCLS_DEBUG) */
+ UNUSED(post);
+ UNUSED(spId);
+ UNUSED(discSdu);
+
+ RETVALUE(ROK);
+} /* end of PtLiKwuDiscSduReq() */
+
+/**
+ *
+ * @brief
+ *
+ * PtLiKwuDatReq - portable data request
+ *
+ * @param[in] pst - Post structure
+ * @param[in] spId - Service provider SAP ID
+ * @param[in] datReq - Data Request
+ *
+ * @return S16
+ * -# ROK
+ */
+#ifdef ANSI
+PUBLIC S16 PtLiKwuDatReq
+(
+Pst *pst,
+SpId spId,
+KwuDatReqInfo *datReq,
+Buffer *mBuf
+)
+#else
+PUBLIC S16 PtLiKwuDatReq(pst, spId, datReq, mBuf)
+Pst *pst;
+SpId spId;
+KwuDatReqInfo *datReq;
+Buffer *mBuf;
+#endif /* ANSI */
+{
+ TRC3(PtLiKwuDatReq)
+#if (ERRCLASS & ERRCLS_DEBUG)
+ /* S16 ret1; */
+ SLogError(pst->srcEnt, pst->srcInst, pst->srcProcId,
+ __FILE__, __LINE__, (ErrCls)ERRCLS_DEBUG,
+ (ErrVal)EPJXXX, (ErrVal)ERRZERO, "Improper selector for NhLiKwuDatReq\n");
+ RETVALUE( RFAILED );
+#endif /* (ERRCLASS & ERRCLS_DEBUG) */
+ UNUSED(pst);
+ UNUSED(spId);
+ UNUSED(datReq);
+ UNUSED(mBuf);
+
+ RETVALUE(ROK);
+} /* end of PtLiKwuDatReq() */
+/*
+*
+* Fun: SUpdMbufMemInfo
+*
+* Desc: This function is used to get the mem region info of a task.
+*
+* Ret: ROK - ok
+* RFAILED - failed, general (optional)
+*
+*
+* File: ss_task.c
+*
+*/
+#ifdef TENB_T2K3K_SPECIFIC_CHANGES
+#ifdef ANSI
+PUBLIC U8 SUpdMbufMemInfo
+(
+Pst *pst,
+Buffer *mBuf
+)
+#else
+PUBLIC U8 SUpdMbufMemInfo(pst,mBuf)
+Pst *pst;
+Buffer *mBuf;
+#endif
+{
+ SsMsgInfo *minfo;
+ SsTTskEntry *tTsk;
+ SsIdx dstIdx;
+
+
+ minfo = (SsMsgInfo*) mBuf->b_rptr;
+
+ dstIdx = osCp.tTskIds[pst->dstEnt][pst->dstInst];
+ tTsk = &osCp.tTskTbl[dstIdx];
+#ifdef SS_MULTICORE_SUPPORT
+ minfo->region = tTsk->sTsk->region;
+#endif /* SS_MULTICORE_SUPPORT */
+ RETVALUE(ROK);
+}
+#endif
+
+#if defined(PDCP_RLC_DL_RBUF) && !defined(SS_RBUF)
+#ifdef ANSI
+PUBLIC S16 pjKwuRbufDatReq
+(
+Pst * pst,
+SpId spId,
+KwuDatReqInfo* datReq,
+Buffer * mBuf
+)
+#else
+PUBLIC S16 pjKwuRbufDatReq(pst, spId, datReq, mBuf)
+Pst * pst;
+SpId spId;
+KwuDatReqInfo* datReq;
+Buffer * mBuf;
+#endif
+{
+ S16 ret1 = ROK;
+
+ Void *elem = NULLP;
+ KwuDatReqDetl *kwuDatReqDetl = NULLP;
+
+ elem = SRngGetWIndx(SS_RNG_BUF_DLPDCP_TO_DLRLC);
+ if (NULLP != elem)
+ {
+ kwuDatReqDetl = (KwuDatReqDetl *) elem;
+ kwuDatReqDetl->spId = spId;
+ kwuDatReqDetl->lcType = datReq->lcType;
+ kwuDatReqDetl->sduId = datReq->sduId;
+ kwuDatReqDetl->rlcId = datReq->rlcId;
+ kwuDatReqDetl->mBuf = mBuf;
+ /* Commenting below function because memory region mapped with threadId*/
+ /* SUpdMbufMemInfo(pst, mBuf);*/
+ SRngIncrWIndx(SS_RNG_BUF_DLPDCP_TO_DLRLC);
+ SsRngInfoTbl[SS_RNG_BUF_DLPDCP_TO_DLRLC].pktRate++;
+ }
+ else
+ {
+#if (ERRCLASS & ERRCLS_DEBUG)
+ SLogError(ENTPJ, 0, SFndProcId(),
+ __FILE__, __LINE__, (ErrCls)ERRCLS_DEBUG,
+ (ErrVal)EPJXXX, (ErrVal)ERRZERO, "PDCP-DL RBUF is FULL!!!\n");
+#endif /* (ERRCLASS & ERRCLS_DEBUG) */
+ SsRngInfoTbl[SS_RNG_BUF_DLPDCP_TO_DLRLC].pktDrop++;
+ ret1 = RFAILED;
+ }
+ RETVALUE(ret1);
+} /* cmPkKwuDatReq */
+
+#endif /* PDCP_RLC_DL_RBUF */
+
+\f
+/********************************************************************30**
+ End of file
+**********************************************************************/