| /***************************************************************************** |
| * Copyright Statement: |
| * -------------------- |
| * This software is protected by Copyright and the information contained |
| * herein is confidential. The software may not be copied and the information |
| * contained herein may not be used or disclosed except with the written |
| * permission of MediaTek Inc. (C) 2016 |
| * |
| * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES |
| * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") |
| * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON |
| * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. |
| * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE |
| * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR |
| * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH |
| * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO |
| * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S |
| * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. |
| * |
| * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE |
| * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, |
| * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, |
| * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO |
| * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. |
| * |
| * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE |
| * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF |
| * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND |
| * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER |
| * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC). |
| * |
| *****************************************************************************/ |
| /************************************************************* |
| * |
| * This Software is the property of VIA Telecom, Inc. and may only be used pursuant to a license from VIA Telecom, Inc. |
| * |
| * Any unauthorized use inconsistent with the terms of such license is strictly prohibited. |
| * |
| * Copyright (c) 2010 VIA Telecom, Inc. All rights reserved. |
| * |
| *************************************************************/ |
| #ifndef _PAFRLP_H_ |
| #define _PAFRLP_H_ 1 |
| |
| #include "paflist.h" |
| #include "cpbuf.h" |
| #include "hlpapi.h" |
| #include "fcpdefs.h" |
| #include "do_rcpapi.h" |
| #include "do_rcp_msgid.h" |
| |
| #include "kal_public_api.h" |
| #include "kal_public_defs.h" |
| #include "md_sap.h" |
| |
| |
| #define NUM_RLP_RESEQ_REC 1500 |
| #define FCP_TASK_INTERVAL 4 |
| #define PAF_RLP_ABORT_TIMER_INTERVAL 500 /*500 ms for abort timer. */ |
| #define PAF_RLP_FLUSH_TIMER_INTERVAL 300 |
| #define PAF_RLP_DDW (48/FCP_TASK_INTERVAL) |
| #define PAF_RLP_ABORT_BACKOFF_INTERVAL 80 /*48 slot * 1.6667 */ |
| #define PAF_DATAPASS_UPPERLAYER_INTERVAL 1 |
| #define MAX_NAK_REC_NUM 20 /* Max NakRequests # in Nak msg */ |
| #ifdef CBP7_EHRPD |
| #define NUM_RLP_ROUTE_PROTOCOL_PKT_REC 1 |
| #endif |
| |
| |
| /* See 0x18 ~ 0x1c most of time in field test, which shall be from RLP_NAK. So if it is less than 0x14, flag monfault.*/ |
| #define DELAY_RLP_OCTET_NAK_FAULT_INTERVAL (20) |
| typedef enum |
| { |
| PAFRLP_NULL_ST, |
| PAFRLP_DATA_ST, |
| PAFRLP_RESET_ST, |
| PAFRLP_MAX_ST |
| } |
| PafRlpStateT; |
| |
| |
| typedef struct PafReseqRecT |
| { |
| kal_uint32 seq; |
| kal_uint16 len; |
| CpBufferT *datap; |
| kal_uint16 dataoffset; |
| #ifdef CBP7_EHRPD |
| kal_bool FirstDataUnit; |
| kal_bool LastDataUnit; |
| #endif |
| } PafReseqRecT; |
| |
| #ifdef CBP7_EHRPD |
| typedef struct |
| { |
| kal_uint32 seq; /* First seq of this route packet */ |
| kal_uint32 nextSeq; /* Next seq of this route packet to receive */ |
| kal_bool IsCompletedPacket; |
| LIST_STR routePacketQ; |
| } PafRouteProtocolPktT; |
| #endif |
| |
| typedef struct |
| { |
| kal_uint8 nAppType; |
| kal_uint8 nRLPFlow; |
| kal_uint8 RLPId; |
| kal_uint8 RLPIDLen; |
| kal_uint8 SeqLen; |
| PafRlpStateT stRlp; |
| kal_bool bFlowNakEnabled; |
| /*This is the timer for passing the in sequence RLP packet to upper layer*/ |
| kal_uint8 nDataPassUpperlayerInterval; |
| HlpRlpFwdDataPktT *pHlpRlpFwdDataIndMsg; |
| kal_uint32 vr; |
| kal_uint32 vn; |
| kal_uint32 ss; // Sequence Space for this RLP |
| LIST_STR reseqQ; |
| LIST_STR nakGapQ; |
| #ifdef CBP7_EHRPD |
| kal_uint8 RoutePDU; /* Octet stream or packet stream */ |
| kal_uint8 DataUnit; |
| kal_uint8 nRoute; |
| LIST_STR routeProtocolPktQ; |
| #endif |
| }PafRlpInstanceT; |
| |
| typedef struct PafNakGapRecT |
| { |
| kal_uint32 seq; |
| kal_uint16 len; |
| //initialized as the Tddw in units of slot when added be NakGapQ, will be |
| //descreased in PAFApplicationLayerProcessing() when received |
| //FCP_TASK_SIG and when it reaches zero, the NAK for this gap should be sent. |
| kal_uint8 nTicksForNak; |
| kal_uint32 time; |
| kal_uint32 tNakSent; |
| kal_bool bNakSent; |
| kal_bool bTimerRunning; |
| } PafNakGapRecT; |
| |
| typedef struct |
| { |
| kal_uint32 FirstErased; |
| kal_uint16 WindowLen; |
| } PafRlpNakReqT; |
| |
| typedef struct |
| { |
| kal_uint8 NumNakRequest; |
| PafRlpNakReqT NakRequest[MAX_NAK_REC_NUM]; |
| }PafRlpNakInfoT; |
| |
| typedef struct |
| { |
| LIST_NODE ResQNodeList[NUM_RLP_RESEQ_REC]; |
| LIST_STR ResQFreeNodes; |
| LIST_STR ResQIdleList; |
| |
| PafReseqRecT resPool[NUM_RLP_RESEQ_REC]; |
| LIST_NODE NakGapNodeList[NUM_RLP_RESEQ_REC]; |
| LIST_STR NakGapFreeNodes; |
| LIST_STR NakGapIdleList; |
| PafNakGapRecT nakGapPool[NUM_RLP_RESEQ_REC]; |
| #ifdef CBP7_EHRPD |
| LIST_NODE RouteProtocolQNodeList[NUM_RLP_ROUTE_PROTOCOL_PKT_REC]; |
| LIST_STR RouteProtocolQFreeNodes; |
| LIST_STR RouteProtocolQIdleList; |
| PafRouteProtocolPktT RouteProtocolPool[NUM_RLP_ROUTE_PROTOCOL_PKT_REC]; |
| #endif |
| } PafRlpBufPool; |
| |
| |
| typedef PACKED_PREFIX struct |
| { |
| kal_uint16 EVDORevAFwdMFRLPStatsFlowId; |
| kal_uint32 EVDORevAFwdMFRLPStatsResetTime; |
| kal_uint16 EVDORevAFwdMFRLPStatsReXmitsNotFound; |
| kal_int64 EVDORevAFwdMFRLPStatsATNakBytesRequested; |
| kal_int64 EVDORevAFwdMFRLPStatsRxDuplicateBytes; |
| kal_int64 EVDORevAFwdMFRLPStatsRxReXmitsBytes; |
| kal_int64 EVDORevAFwdMFRLPStatsRxNewDataBytes; |
| kal_int64 EVDORevAFwdMFRLPStatsRxTotalBytes; |
| kal_int32 EVDORevAFwdMFRLPStatsNaksSent; |
| kal_int32 EVDORevAFwdMFRLPStatsRxNakTimesOuts; |
| kal_int32 EVDORevAFwdMFRLPStatsResetCount; |
| kal_uint16 EVDORevAFwdMFRLPStatsATResetRequestCount; |
| kal_uint16 EVDORevAFwdMFRLPStatsANResetAckCount; |
| kal_uint16 EVDORevAFwdMFRLPStatsANResetRequestCount; |
| } PACKED_POSTFIX EVDORevAFwdMFRLPStatsMeasT; |
| |
| typedef PACKED_PREFIX struct |
| { |
| EVDORevAFwdMFRLPStatsMeasT rlpMeas[MAX_RLP_FLOW_SUPPORTED]; |
| } PACKED_POSTFIX EVDORevAFwdMFRLPStatsEventT; |
| |
| typedef PACKED_PREFIX struct |
| { |
| kal_uint32 SysTime; |
| EVDORevAFwdMFRLPStatsMeasT rlpMeas[MAX_RLP_FLOW_SUPPORTED]; |
| } PACKED_POSTFIX PafMfpaRlpStatPeekRspMsgT; |
| |
| typedef PACKED_PREFIX struct |
| { |
| kal_uint32 SysTime; |
| EVDORLPStatsMeasT rlpMeas; |
| } PACKED_POSTFIX PafDpaRlpStatPeekRspMsgT; |
| |
| typedef struct |
| { |
| kal_uint32 ulTaskId; |
| kal_uint32 ulSapId; |
| }PafSapInfo; |
| void PafInit(void); |
| void PafRlpInit(PafRlpInstanceT *pRlpInstance); |
| void PafRlpCspConnCloseMsg(PafRlpInstanceT *pRlpInstance); |
| void PafRlpIdpConnOpenMsg(PafRlpInstanceT *pRlpInstance); |
| void PafRlpReset(PafRlpInstanceT *pRlpInstance); |
| kal_uint32 PafRlpGetSeqSpace(kal_uint8 s); |
| |
| kal_bool PafRlpFrameDecode(kal_uint8 nAppType, FwdLinkPktT *pNode, kal_uint8 *pRLPFlow, PafReseqRecT **pReseq); |
| void PafRlpFrameRecv(PafRlpInstanceT *pRlpInstance, PafReseqRecT *pReseq); |
| void PafRlpBufferFramesForUpperLayerDelivery(PafRlpInstanceT *pRlpInstance, PafReseqRecT *pReseq); |
| void PafRlpServiceNakTimer(PafRlpInstanceT *pRlpInstance); |
| void PafRlpAbortTmrExpired(PafRlpInstanceT *pRlpInstanace); |
| void PafRlpResetTxIndAllFlowMsg(PafRlpInstanceT *pRlpInstance, kal_uint8 nRlpFlow); |
| void PafRlpResetTxIndMsg(PafRlpInstanceT *pRlpInstance, kal_uint8 nRlpFlow); |
| void PafRlpResetRxIndMsg(PafRlpInstanceT *pRlpInstance); // ResetAck to DPA |
| void PafRlpResetTxCompleteMsg(PafRlpInstanceT *pRlpInstance); |
| void PafRlpResetRxCompleteMsg(PafRlpInstanceT *pRlpInstance); |
| kal_bool PafRlpSendDsarMsg(DsaRevMsgT *MsgDataP); |
| void PafRlpStateSet(PafRlpInstanceT *pRlpInstance, PafRlpStateT rlpState); |
| PafRlpStateT PafRlpStateGet(PafRlpInstanceT *pRlpInstance); |
| |
| #ifdef CBP7_EHRPD |
| void PafRlpPacketFrameRecv(PafRlpInstanceT *pRlpInstance, PafReseqRecT *pReseq); |
| void PafRlpIpPacketFramesForUpperLayerDelivery(PafRlpInstanceT *pRlpInstance, PafRouteProtocolPktT *pRouteProtocolPkt); |
| void PafRlpPacketAbortTmrExpired(PafRlpInstanceT *pRlpInstance); |
| #endif |
| |
| void PafResetLastRLPStat(void); |
| |
| #endif /*_PAFRLP_H_*/ |
| |