--- /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: LTE RLC file for downlink and non real time tasks
+
+ Type: C include file
+
+ Desc: This file contains helper macros for RLC downlink
+ and non real time task
+
+ File: kw_dl.h
+
+*********************************************************************21*/
+/** @file kw_dl.h
+@brief RLC Downlink helper macros
+*/
+
+#ifndef __KW_DLH__
+#define __KW_DLH__
+#define KW_DL_INST 1
+#define KW_MAX_RNG_DEQ_INDX 8
+
+/* Below are the status used within RLC */
+#define KW_SDU_OPAT_NOUPDATE 0
+#define KW_SDU_OPAT_UPD_TX 1
+#define KW_SDU_OPAT_UPD_RETX 2
+
+/* Below are the status which needs to be updated to MAC */
+#define KW_RGU_SDU_OPAT_NOUPDATE 0
+#define KW_RGU_SDU_OPAT_UPDATE 1
+#define KW_RGU_SDU_OPAT_BREACH 2
+
+/* PDB Values for various QCI bearers : This value is considered
+ after taking into account a 20ms delay at the network */
+#define KW_PDB_VALUE_FOR_QCI1 80
+#define KW_PDB_VALUE_FOR_QCI2 130
+#define KW_PDB_VALUE_FOR_QCI3 30
+#define KW_PDB_VALUE_FOR_QCI4 280
+#define KW_PDB_VALUE_FOR_QCI5 80
+#define KW_PDB_VALUE_FOR_QCI6 280
+#define KW_PDB_VALUE_FOR_QCI7 80
+#define KW_PDB_VALUE_FOR_QCI8 280
+#define KW_PDB_VALUE_FOR_QCI9 280
+
+#define KW_DATA_BITMASK 0x80 /* Data bitmask is used to fill D/C bit for data*/
+/**
+ * @def KW_MEAS_IS_DL_IP_MEAS_ON_FOR_RB
+ *
+ * This macro is used to check if DL IP throughput measurement is ON
+ * or off for the passed rb
+ *
+ * Returns TRUE (non-zero) if measurement is ON else FALSE (zero)
+ *
+ * @param[in] _gCb RLC DL Cb
+ * @param[in] _rbCb RLC downlink control block
+ *
+*/
+#ifdef LTE_L2_MEAS
+#define KW_MEAS_IS_DL_ANY_MEAS_ON_FOR_RB(_gCb, _rbCb) \
+ ((_rbCb->rlcId.rbType == CM_LTE_DRB) && \
+ (_gCb->u.dlCb->kwL2Cb.measOn[_rbCb->qci]))
+
+#define KW_MEAS_IS_DL_IP_MEAS_ON_FOR_RB(_gCb, _rbCb) \
+ ((_rbCb->rlcId.rbType == CM_LTE_DRB) && \
+ (_gCb->u.dlCb->kwL2Cb.measOn[_rbCb->qci] & LKW_L2MEAS_DL_IP) && \
+ (_rbCb->rbL2Cb.measOn & LKW_L2MEAS_DL_IP))
+
+#define KW_MEAS_IS_DL_DELAY_MEAS_ON_FOR_RB(_gCb, _rbCb) \
+ ((_rbCb->rlcId.rbType == CM_LTE_DRB) && \
+ (_gCb->u.dlCb->kwL2Cb.measOn[_rbCb->qci] & LKW_L2MEAS_DL_DELAY))
+
+#define KW_MEAS_IS_DL_UU_LOSS_MEAS_ON_FOR_RB(_gCb, _rbCb) \
+ ((_rbCb->rlcId.rbType == CM_LTE_DRB) && \
+ (_gCb->u.dlCb->kwL2Cb.measOn[_rbCb->qci] & LKW_L2MEAS_UU_LOSS))
+#define KW_UPD_PDCP_L2_DLDELAY_STS(_kwCb, _kwRbCb, _delay) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_DL_DELAY)) \
+ { \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_DL_DELAY]->dlPjSduDelay.sduDelay += _delay; \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_DL_DELAY]->dlPjSduDelay.numSdus++; \
+ } \
+}
+
+#define KW_UPD_L2_UU_LOSS_PKTS(_kwCb, _kwRbCb, _val) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_UU_LOSS)) \
+ { \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_UU_LOSS]->uuLoss.dLoss += _val; \
+ } \
+}
+#define KW_UPD_L2_UU_LOSS_POS_PKTS(_kwCb,_kwRbCb,_val) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_UU_LOSS)) \
+ { \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_UU_LOSS]->uuLoss.posPkts += _val; \
+ } \
+}
+/* Discard new changes starts */
+#define KW_UPD_L2_DL_DISC_SDU_STS(_kwCb,_kwRbCb) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_DL_DISC)) \
+ { \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_DL_DISC]->dlDisc.discSdus++; \
+ } \
+}
+
+#define KW_UPD_L2_DL_TOT_SDU_STS(_kwCb,_kwRbCb) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_DL_DISC)) \
+ { \
+ (_kwRbCb)->rbL2Cb.l2Sts[KW_L2MEAS_DL_DISC]->dlDisc.totSdus++; \
+ } \
+}
+
+#define KW_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(_kwCb, _kwRbCb) \
+{ \
+ if(((_kwRbCb)->rlcId.rbType == CM_LTE_DRB) && \
+ ((_kwCb)->u.dlCb->kwL2Cb.measOn[_kwRbCb->qci] & LKW_L2MEAS_DL_DISC)) \
+ { \
+ U32 idx1; \
+ for (idx1 = 0; idx1 < LKW_MAX_L2MEAS; idx1++) \
+ { \
+ if(_kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.measType & LKW_L2MEAS_DL_DISC) \
+ { \
+ if(_kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.measData[(_kwRbCb)->qci].totDrbsPerQci > 0) \
+ { \
+ _kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.measData[(_kwRbCb)->qci].totDrbsPerQci--; \
+ if (_kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.measData[(_kwRbCb)->qci].totDrbsPerQci == 0) \
+ { \
+ _kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.qci[(_kwRbCb)->qci] = 0; \
+ cmMemset((U8 *)&_kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.measData[(_kwRbCb)->qci], 0, \
+ sizeof(_kwCb->u.dlCb->kwL2Cb.kwL2EvtCb[idx1].measCb.val.nonIpThMeas.measData[(_kwRbCb)->qci])); \
+ } \
+ } \
+ } \
+ } \
+ } \
+}
+#else
+#define KW_UPD_PDCP_L2_DLDELAY_STS(_kwCb, _kwRbCb, _delay)
+#define KW_MEAS_IS_DL_IP_MEAS_ON_FOR_RB(_gCb, _rbCb)
+#define KW_MEAS_IS_DL_DELAY_MEAS_ON_FOR_RB(_gCb, _rbCb)
+#define KW_UPD_L2_DL_DISC_SDU_STS(_kwCb,_kwRbCb)
+#define KW_UPD_L2_DL_TOT_SDU_STS(_kwCb, _kwRbCb)
+#define KW_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(_kwCb, _kwRbCb)
+#endif
+
+
+#endif /* __KW_DLH__ */
+\f
+/********************************************************************30**
+
+ End of file
+**********************************************************************/