blob: dcdc4631aa876ae9aab2b022065e759d4262250d [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) 2006-2010 VIA Telecom, Inc. All rights reserved.
*
*************************************************************/
#ifndef _PAR_RLP_H_
#define _PAR_RLP_H_
/*****************************************************************************
*
* FILE NAME : ParRlp.h
*
* DESCRIPTION : This file contains function prototypes and other definitions
* for the Reverse RLP protocol
*
* HISTORY :
* See Log at end of file
*
*****************************************************************************/
/*----------------------------------------------------------------------------
* Include Files
----------------------------------------------------------------------------*/
#include "sysdefs.h"
#include "par.h"
/*----------------------------------------------------------------------------
Defines And Macros
----------------------------------------------------------------------------*/
#define RLP_RETXQ_PRIORITY 60
#define RLP_TXQ_PRIORITY 70
#define PAR_RLP_ABORT_TIMER_INTERVAL 500 /*500 ms for abort timer. */
#define PAR_RLP_FLUSH_TIMER_INTERVAL 300
/*----------------------------------------------------------------------------
structure definitions
----------------------------------------------------------------------------*/
typedef enum
{
RESV_CLOSE_ST,
RESV_OPEN_ST,
RESV_WFR_OPEN_ST,
RESV_WFR_CLOSE_ST,
RESV_MAX_ST
}ParResrevationStateT;
typedef enum
{
RESV_OP_NULL,
RESV_OP_ONREQ,
RESV_OP_OFFREQ
} ParReservationOperationTypeT;
typedef struct
{
#if defined (RCP_RI_HRT_DEV)
kal_uint32 TimerCb;
#else
kal_timerid TimerCb;
#endif
kal_bool Active;
} ParRlpFlushTimerT;
#ifdef CBP7_EHRPD
typedef struct
{
kal_uint32 seq;
kal_uint8 RLPHdrLen;
kal_uint16 nAvailableBytes;
} ParRlpNakCheckRecT;
typedef struct
{
kal_uint8 nAppType;
kal_uint8 nRLPFlow;
} ParRlpMaxVsUpdateT;
typedef struct
{
kal_uint32 seq;
kal_uint32 range;
kal_bool bDeleteWhenSameSeq;
} ParRlpTxQDeleteCheckT;
#endif
typedef struct
{
kal_int32 EVDORevARevMFRLPStatsFlowId;
kal_uint32 EVDORevARevMFRLPStatsResetTime;
kal_int32 EVDORevARevMFRLPStatsRLPStatsNaksReceived;
kal_int32 EVDORevARevMFRLPStatsReXmitsNotFound;
kal_int64 EVDORevARevMFRLPStatsANNakBytesRequested;
kal_int64 EVDORevARevMFRLPStatsTxReXmitsBytes;
kal_int64 EVDORevARevMFRLPStatsTxNewDataBytes;
kal_int64 EVDORevARevMFRLPStatsTxTotalBytes;
kal_int32 EVDORevARevMFRLPStatsResetCount;
kal_int32 EVDORevARevMFRLPStatsATResetRequestCount;
kal_int32 EVDORevARevMFRLPStatsANResetAckCount;
kal_int32 EVDORevARevMFRLPStatsANResetRequestCount;
} EVDORevARevMFRLPStatsMeasT;
typedef struct
{
EVDORevARevMFRLPStatsMeasT rlpMeas[MAX_RLP_FLOW_SUPPORTED];
} EVDORevARevMFRLPStatsEventT;
typedef struct
{
kal_uint32 SysTime;
EVDORevARevMFRLPStatsMeasT rlpMeas[MAX_RLP_FLOW_SUPPORTED];
} ParRlpStatPeekRspMsgT;
/*----------------------------------------------------------------------------
API Functions
----------------------------------------------------------------------------*/
void ParRlpInit(void);
void ParRlpCommit(AppSubTypeT appType);
void ParHlpRevDataMsgHandler(ParHlpDataTxMsgT *pMsg);
void ParRlpAccessFlushTmExpireHandler(kal_uint32 TimerId);
void ParRlpServiceFlushTmExpireHandler(kal_uint32 TimerId);
void ParRlpResetTxIndicationAckProc (DsaFwdMsgT *pMsgData, kal_uint8 AppType);
void ParRlpResetRxIndicationProc (DsaFwdMsgT *pMsgData, kal_uint8 AppType);
void ParMfpaRlpNakProc (DsaFwdMsgT *pMsgData, kal_uint8 AppType);
void ParDpaRlpNakProc (DsaFwdMsgT *pMsgData, ParRlpInstanceT *pRlpInst);
void ParRlpResetProc (kal_uint16 ProtocolType,ParRlpInstanceT *pRlpInst);
void ParRlpResetAckProc (kal_uint16 ProtocolType,ParRlpInstanceT *pRlpInst);
void ParRlpInitialize(ParRlpInstanceT* pInst);
void ParRlpStateSet(ParRlpInstanceT *pRlpInst, ParRlpStateT rlpState);
ParRlpStateT ParRlpStateGet(ParRlpInstanceT *pRlpInst);
void ParReservationAcceptMsgProc(kal_uint8* pData);
void ParReservationRejectMsgProc(kal_uint8* pData);
void ParRevReservationOnMsgProc(kal_uint8* pData);
void ParRevReservationOffMsgProc(kal_uint8* pData);
void ParFwdReservationOnMsgProc(kal_uint8* pData);
void ParFwdReservationOffMsgProc(kal_uint8* pData);
void ParRlpReservTmExpireMsgProc(void);
void ParPafRlpResetReqMsgHandler(ParPafRlpResetReqMsgT *pMsg);
void ParHlpRevDataSig(void);
void ParHlpRevData2Sig(void);
kal_bool ParRlpInsertRec2RetxQ(RetxInfoT* pInfo, ParRlpInstanceT *pRlpInst);
kal_bool Compare2Seq(kal_uint32 Seq1, kal_uint32 Seq2, kal_uint32 SeqRange);
kal_bool ParRlpTxQManage(ParRlpInstanceT* pInst);
kal_bool ParDpaAccessGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_bool ParDpaServiceGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_uint16 ParDpaAccessGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_uint16 ParDpaServiceGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaAccessPktSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaAccessPktSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaServicePktSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaServicePktSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaAccessPktNotSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaAccessPktNotSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaServicePktNotSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaServicePktNotSent(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaAccessPktPhyTrafficMissed(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaAccessPktPhyTrafficMissed(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaServicePktPhyTrafficMissed(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaServicePktPhyTrafficMissed(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaAccessPktPhyTrafficAcked(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaAccessPktPhyTrafficAcked(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParDpaServicePktPhyTrafficAcked(kal_uint8 revMacId,kal_uint8 subStreamNum);
void ParMfpaServicePktPhyTrafficAcked(kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_uint16 ParMfpaAccessGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_bool ParMfpaAccessGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_bool ParMfpaServiceGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_uint16 ParMfpaServiceGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_uint32 ParDpaAccessGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
kal_uint32 ParDpaServiceGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
kal_uint32 ParMfpaAccessGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
kal_uint32 ParMfpaServiceGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
void ParRlpAccessFlushTimerCallBack(void);
void ParRlpServiceFlushTimerCallBack(kal_uint32 TimerId);
#if defined (MTK_PLT_ON_PC)
void ParRlpStatsResetMsgProc(void);
void ParRlpStatsPeekMsgProc(void *MsgDataP);
#endif
void ParRlpConnOpenMsgProc(void);
void ParRlpConnCloseMsgProc(void);
void ParGAUPSetRlpFlowInfo(ParRlpInstanceT* pInst, FlowIdentificationAttribT* pRlpInfo, kal_uint8 FlowNum );
void ParRlpDsarTxStatusMsgProc(kal_uint8 nAppType);
void ParRlpCleanUpQueue(void);
#ifdef CBP7_EHRPD
void ParEmpaAccessPktSent(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaServicePktSent(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaAccessPktNotSent(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaServicePktNotSent(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaAccessPktPhyTrafficMissed(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaServicePktPhyTrafficMissed(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaAccessPktPhyTrafficAcked(kal_uint8 revMacId, kal_uint8 subStreamNum);
void ParEmpaServicePktPhyTrafficAcked(kal_uint8 revMacId, kal_uint8 subStreamNum);
kal_uint16 ParEmpaAccessGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_uint16 ParEmpaServiceGrant(DatapktlistGT* pPktList, kal_uint16 grantSize, kal_uint8 revMacId,kal_uint8 subStreamNum);
kal_bool ParEmpaAccessGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_bool ParEmpaServiceGetMaxPriority(BestPktInfoT* pBestPkt,kal_uint8 subStreamNum);
kal_uint32 ParEmpaAccessGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
kal_uint32 ParEmpaServiceGetPktQueSz(kal_uint8 macFlowId, kal_uint8 subStreamNum);
kal_uint16 ParRlpSendDataFromTxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParRlpSendDataFromRetxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpOctetOctetSendFromTxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpOctetPacketSendFromTxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpPacketPacketSendFromTxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpOctetOctetSendFromRetxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpOctetPacketSendFromRetxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 ParEmpaRlpPacketPacketSendFromRetxQ(ParRlpInstanceT *pInst,DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
void ParEmpaRlpNakProc (DsaFwdMsgT *pMsgData, kal_uint8 AppType);
kal_bool ParEmpaRlpPacketPacketFlushCheckHdl(void *pList,void *pRecNew, void *pRecOld);
#endif
/*****************************************************************************
* End of File
*****************************************************************************/
#endif