blob: 7a7cf73dfd30c785066a0153c6299476a75b6fea [file] [log] [blame]
/*****************************************************************************
* 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_*/