[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/protocol/l2_c2k/evdo/pafrlp.h b/mcu/interface/protocol/l2_c2k/evdo/pafrlp.h
new file mode 100644
index 0000000..7a7cf73
--- /dev/null
+++ b/mcu/interface/protocol/l2_c2k/evdo/pafrlp.h
@@ -0,0 +1,247 @@
+/*****************************************************************************
+*  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_*/
+