blob: dced0c76ed94dded06cf501c177055fcf02c836d [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_H_
#define _PAR_H_
/*****************************************************************************
*
* FILE NAME : par.h
*
* DESCRIPTION : This file contains function prototypes and other definitions
* for the Reverse Packet Application
*
* HISTORY :
* See Log at end of file
*
*****************************************************************************/
/*----------------------------------------------------------------------------
* Include Files
----------------------------------------------------------------------------*/
#include "ParRlpList.h"
#include "do_fcpapi.h"
#include "do_dsaapi.h"
#include "do_Qos.h"
#ifdef CBP7_EHRPD
//#include "../fcp/paflist.h"
#endif
#include "slc_nvram.h"
/*----------------------------------------------------------------------------
Defines And Macros
----------------------------------------------------------------------------*/
#define RLP_DPA_HEADER_BITS 22
#define MAX_LOCATION_LEN 128
#define MAX_STORAGEBLOB_LEN 128
#define MAX_NAK_REC_NUM 20 /* Max NakRequests # in Nak msg */
/*----------------------------------------------------------------------------
structure definitions
----------------------------------------------------------------------------*/
/* Enum definitions */
typedef enum
{
RCP_PAR_SUBTYPE_ERR,
RCP_PAR_STRNUM_ERR,
RCP_PAR_TXLIST_ERR,
RCP_PAR_RETXLIST_ERR,
RCP_PAR_PHYMISSLIST_ERR,
RCP_PAR_MSGDEC_ERR,
RCP_PAR_APPNOTINIT_ERR,
RCP_PAR_TXLIST_FULL_ERR,
RCP_PAR_MSGID_ERR,
RCP_PAR_OTAMSGID_ERR,
RCP_PAR_GAUP_ATTR_ERR,
RCP_PAR_NAK_NOT_SUPPORT_ERR,
RCP_PAR_GRANT_SIZE_NOT_ENOUGH_ERR,
RCP_PAR_MAX_ERR_ID
}PARErrorT;
typedef struct
{
kal_uint8 nAppType;
kal_uint16 nProtocolType;
ParFlowCtrlStateT stFlowCtrl;
#ifdef CBP7_EHRPD
ParRspStateT stRsp;
#endif
}ParAppInstanceT;
typedef struct
{
kal_uint16 nProtocolType;
kal_uint8 nAppType;
}ParStreamConfigInfoT;
typedef enum
{
PAR_Invalid = 0x0,
PAR_Default = 0x1,
PAR_MultiFlow
} PARAppTypeT;
typedef enum
{
RESET_TX_INDICATION_MSG,
RESET_MSG = RESET_TX_INDICATION_MSG,
RESET_RX_INDICATION_MSG,
RESET_ACK_MSG = RESET_RX_INDICATION_MSG,
NAK_MSG,
LOCATION_REQUEST_MSG,
LOCATION_NOTIFICATION_MSG,
LOCATION_ASSIGNMENT_MSG,
LOCATION_COMPLETE_MSG,
XON_REQUEST_MSG,
XON_RESPONSE_MSG,
XOFF_REQUEST_MSG,
XOFF_RESPONSE_MSG,
DATA_READY_MSG,
DATA_READY_ACK_MSG,
RESET_TX_INDICATION_ACK_MSG = 0x0d,
RESET_TX_COMPLETE_MSG,
RESET_RX_COMPLETE_MSG,
STORAGEBLOB_REQ_MSG,
STORAGEBLOB_NOTIFICATION_MSG,
STORAGEBLOB_ASSIGNMENT_MSG,
STORAGEBLOB_COMPLETE_MSG,
DATA_OVER_SIGNALING_MSG = 0x14,
DATA_OVER_SIGNALING_ACK_MSG,
RESERVATION_ON_REQ_MSG=0x16,
RESERVATION_OFF_REQ_MSG,
RESERVATION_ACCEPT_MSG,
RESERVATION_REJECT_MSG,
REV_RESERVATION_ON_MSG,
REV_RESERVATION_OFF_MSG,
FWD_RESERVATION_OFF_MSG = 0x22,
FWD_RESERVATION_ON_MSG,
FWD_RESERVATION_ACK_MSG,
CONFIGURATION_REQUEST_MSG = 0x50,
CONFIGURATION_RESPONSE_MSG,
ATTRIBUTE_UPDATE_REQ_MSG = 0x52,
ATTRIBUTE_UPDATE_ACCEPT_MSG,
ATTRIBUTE_UPDATE_REJECT_MSG
}PAROtaMsgIdT;
typedef enum
{
RLP_NULL_ST,
RLP_DATA_ST,
RLP_RESET_INIT_ST,
RLP_RESET_RSP_ST,
RLP_MAX_ST
} ParRlpStateT;
typedef enum
{
RLP_NONE,
RLP_TXQ,
RLP_RETXQ
}RlpTxQTypeT;
typedef struct
{
kal_uint32 FirstErased;
kal_uint16 WindowLen;
} ParRlpNakReqT;
typedef struct
{
kal_uint8 RLPFlow;
#ifdef CBP7_EHRPD
ParRspRouteT RspRoute;
#endif
kal_uint8 SequenceLength;
kal_uint8 NakRequests;
ParRlpNakReqT Request[MAX_NAK_REC_NUM];
#ifdef CBP7_EHRPD
kal_uint8 VR;
#endif
}ParRlpNakMsgT;
typedef struct
{
kal_uint32 TimerId;
}ParTExpireMsgT;
/************************************************************/
/* structure for RLP */
typedef struct
{
/* kal_bool bBufFull;*/
RlpTxQTypeT BufType; /*Type of buffer the last packet sent from*/
kal_uint16 BytesTx;
kal_uint16 BytesRetx;
#ifdef CBP7_EHRPD
PAR_LIST_STR TxReseqQ; /*If the DataUnit is packet for a Packet stream, need this for retx */
#endif
}ParRlpTxInfoT;
typedef struct ParRlpInstance_Struct
{
kal_uint8 AppType;
kal_uint8 RLPId;
kal_uint8 RLPFlowId;
kal_uint8 RLPIDLen; /*In Bits*/
kal_uint8 SEQLen; /* In Bits*/
kal_uint8 RLPHdrLen; /*In Bytes */
kal_uint8 Priority;
ParRlpStateT RlpState;
kal_uint32 vs;
kal_uint32 range;
BestPktInfoT bestPktInfo;
ParRlpTxListT TxList;
ParRlpRetxListT RetxList;
ParRlpTxInfoT TxInfo;
kal_uint8 MacFlowId;
kal_bool FlushTimerExpired;
#ifdef CBP7_EHRPD
kal_uint32 maxVS;
ParRspRouteT curRoute;
kal_uint16 (*ParRlpSendDataFromTxQ)(struct ParRlpInstance_Struct *pInst, DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
kal_uint16 (*ParRlpSendDataFromRetxQ)(struct ParRlpInstance_Struct *pInst, DatapktlistGT* pPktList, kal_uint16 nBytesAvail);
PAR_LIST_STR TxReseqQ; /*If the DataUnit is packet for a Packet stream, need this for retx */
#endif
}ParRlpInstanceT;
/*************************************************************************************/
/* structure for Location Update Protocol */
typedef struct
{
kal_uint8 LocationType;
kal_uint8 LocationLen;
kal_uint8 LocationValue[MAX_LOCATION_LEN];
} ParLocationDataRecT;
typedef struct
{
kal_uint16 StorageBLOBType;
kal_uint8 StorageBLOBLen;
kal_uint8 StorageBLOBValue[MAX_STORAGEBLOB_LEN];
} ParStorageBLOBDataRecT;
typedef struct
{
kal_bool bLocValueStored;
kal_uint8 LocTransId;
kal_bool bStorageBlobStored;
kal_uint8 BlobTransId;
ParLocationDataRecT LocationData;
ParStorageBLOBDataRecT StorageBlob;
/*kal_bool bConnSetup;*/
}ParLocUpdInfoT;
/*************************************************************************************/
/* structure for Attribute */
typedef struct
{
AppSubTypeT parSubType;
/* kal_uint16 ProtocolType;*/
/*Default Packet Application Attributes*/
kal_uint8 RANHandoff;
/*Multi-Flow Packet Application Attributes*/
kal_uint8 MaxAbortTimer; /*in units of 100ms*/
kal_bool RevFlowNakEnabled;
kal_bool FlowPhysicalLayerNakEnabledRev;
kal_uint8 RevFlowHighLayerProtocol;
/* kal_uint8 ReservationIdleStateRev[MAX_NUM_RESERVATIONS];
kal_uint8 ReservationIdleStateFwd[MAX_NUM_RESERVATIONS];*/
kal_uint16 FlowTransmitAbortTimerRev;
kal_bool FlowDataOverSignalingAllowedRev;
FlowIdentificationAttribT attribRevFlowIdentification;
FlowTimersAttribT attribRevFlowTimer;
kal_uint16 FlowAbortTimerRevInFrame;
/* FlowReservationAttribT attribRevFlowReservation;
FlowReservationAttribT attribFwdFlowReservation;*/
MaxRLPFlowsAttribT attribRevmaxRLPFlows;
/* MaxReservationsAttribT attribRevMaxResv;*/
SupportHLProtocolT SupportedHLProtocol;
#ifdef CBP7_EHRPD
/*Enhanced Multi-Flow Packet Application attributes */
kal_bool PPPFreeAuthenticationSupport;
kal_bool TwoRouteSupported;
kal_bool ATNakDelaySupported;
kal_uint8 attribRevFlowProtocolPDU;
kal_uint8 attribRevFlowDataUnit;
kal_uint8 attribRevRouteProtocolPDU;
RevFlowProtocolParametersAttribT attribRevFlowProtocolParameters;
RevRouteProtocolParametersAttribT attribRevRouteProtocolParameters;
#endif
}ParAccessConfigDataT;
typedef struct
{
kal_uint8 AttrToBeNegotiated;
kal_uint8 CfgReqTranId;
} ParAttrNegotiationInfoT;
/*----------------------------------------------------------------------------
API Functions
----------------------------------------------------------------------------*/
void ParMsgHandler(kal_uint32 MsgId, kal_uint32 MsgSize, void* pMsg);
void ProcessParDsaFwdMsg(DsaFwdMsgT *MsgDataP);
void ParInit(void);
void ParInitAppInstWithStreamConfigInfo(StreamConfigAttribT *pConfigData);
void ParRlpPhyMissRetxQUpdate(void);
void ParAppFlowCtrlStateSet(ParAppInstanceT *pAppInst, ParFlowCtrlStateT state);
kal_bool ParSendDSARMsg(DsaRevMsgT* pMailMsg);
void ParSendFwdAttribute(PafRcpSessionConfigMsgT* pCfgData);
void ParAccessCommit(void);
void ParServiceCommit(void);
void ParInitStructures(kal_uint16 SubType, kal_bool InUse);
void ParHandleReservationLabelCmd(ParRlpReservationOnOffMsgT* pMsg);
void ParHandleSnKKQoSRequestCmd(ParSnKKQosReqMsgT* pMsg);
void ParSendReservationOnReq(kal_uint8 Count, ReservationInfoT* pResv);
void ParSendReservationOffReq(kal_uint8 Count, ReservationInfoT* pResv);
void ProcessParLupUnsolicitedCfgMsg(LUPUnsolicitedCfgMsgT* MsgDataP);
ParRlpInstanceT *GetRlpInstByAppStream(ParHlpDataTxMsgT *pMsg, PARAppStreamT AppStream);
/*****************************************************************************
* End of File
*****************************************************************************/
#endif