X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrrlc%2Fkw_dl.h;fp=src%2F5gnrrlc%2Fkw_dl.h;h=cde56a0c78e1f2e92a46077ad2c0e4cd6eeda800;hb=5625a52ad68f6ad93684e68bbbdbaef0d462cf9a;hp=0000000000000000000000000000000000000000;hpb=59f84608ec15c016958a6e0e0ddd813f376c0925;p=o-du%2Fl2.git diff --git a/src/5gnrrlc/kw_dl.h b/src/5gnrrlc/kw_dl.h new file mode 100755 index 000000000..cde56a0c7 --- /dev/null +++ b/src/5gnrrlc/kw_dl.h @@ -0,0 +1,176 @@ +/******************************************************************************* +################################################################################ +# 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__ */ + +/********************************************************************30** + + End of file +**********************************************************************/