Committing in PDCP code
[o-du/l2.git] / src / 5gnrpdcp / pj_ptli.c
diff --git a/src/5gnrpdcp/pj_ptli.c b/src/5gnrpdcp/pj_ptli.c
new file mode 100755 (executable)
index 0000000..9fb1ab5
--- /dev/null
@@ -0,0 +1,627 @@
+/*******************************************************************************
+################################################################################
+#   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
+**********************************************************************/