blob: 6196969b674401ac58506b35e546542a631c9583 [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 _CLCOMP_H_
#define _CLCOMP_H_ 1
/*****************************************************************************
*
* FILE NAME : clcomp.h
*
* DESCRIPTION : This file includes the definition of OMP
*
* HISTORY :
* See Log at end of file
*
*****************************************************************************/
/*----------------------------------------------------------------------------
Include Files
----------------------------------------------------------------------------*/
#include "cpbuf.h"
#include "do_clcapi.h"
#include "do_rupapi.h"
#include "do_idpapi.h"
#include "do_dsaapi.h"
#include "do_ompapi.h"
#ifdef MTK_DEV_C2K_IRAT
#include "valapi.h"
#endif
#include "slc_nvram.h"
/*----------------------------------------------------------------------------
Global Defines and Macros
----------------------------------------------------------------------------*/
#define CP_1_BIT_WIDTH 1
#define CP_2_BITS_WIDTH 2
#define CP_3_BITS_WIDTH 3
#define CP_4_BITS_WIDTH 4
#define CP_5_BITS_WIDTH 5
#define CP_6_BITS_WIDTH 6
#define CP_7_BITS_WIDTH 7
#define CP_8_BITS_WIDTH 8
#define OMP_ATTRIB_OCP_BIT 0x01
#define OMP_ATTRIB_RUTC_BIT 0x02
#define N_OMP_MIN_ZONE_SIGNATURE_LIST_SIZE 8
#define OMP_MAX_CACHE_RECS 6
#define OMP_SECTORID_LENGTH_IN_BYTE 16
#ifdef MTK_DEV_C2K_IRAT
#define OMP_MAX_OTHER_RAT_REC_NUM 16
#define OMP_MAX_NEIGHBORRAT_REC_LEN 400
#endif /* MTK_DEV_C2K_IRAT */
typedef kal_uint8 OmpSectorIdT[OMP_SECTORID_LENGTH_IN_BYTE];
/*----------------------------------------------------------------------------
Global Typedefs
----------------------------------------------------------------------------*/
typedef enum {
ST_EVDO,
ST_CDMA_1X
} SystemTypeT;
typedef enum {
OMP_INACTIVE_ST,
OMP_ACTIVE_ST,
OMP_STATE_MAX
} OmpStateT;
typedef enum {
OMP_DEFAULT,
OMP_MAX_PROT
} OmpSubTypeT;
typedef enum {
OMP_INCONFIG,
OMP_INUSE,
OMP_MAX_INSTANCE
} OmpInstanceT;
typedef enum {
OMP_QUICKCONFIG_MESSAGE,
OMP_SECTORPARAMETERS_MESSAGE,
#ifdef MTK_DEV_C2K_IRAT
OMP_HRPDSILENCEPARAMETERS_MESSAGE,
OMP_OTHERRAT_NEIGHBORLIST_MESSAGE,
#endif /* MTK_DEV_C2K_IRAT */
OMP_CONFIG_REQUEST_MESSAGE = 0x50,
OMP_CONFIG_RESPONSE_MESSAGE,
OMP_MAX_MESSAGE_ID
} OmpMessageTypeT;
typedef enum {
OMP_ATTRIB_OCP = 0xFF, /*OverheadCachePeriod Attribute ID, 0x00*/
OMP_ATTRIB_RUTC = 0xFE /*RouteUpdateTriggerCodeListSize Attribute ID, 0x00 */
} OmpAttribIdT;
typedef struct {
kal_uint8 ColorCode;
kal_uint32 SectorID24;
kal_uint16 SectorSignature;
kal_uint16 AccessSignature;
//kal_uint16 OldAccessSignature;/*not used*/
kal_bool Redirect;
kal_uint8 RPCCount63To0;
kal_uint8 ForwardTrafficValid63To0[8];
kal_bool RPCCount127To64Included;
kal_uint8 RPCCount127To64;
kal_uint8 ForwardTrafficValid127To64[8];
kal_uint8 Reserved;
#ifdef MTK_DEV_C2K_IRAT
kal_bool ReservedBitsIncluded;
kal_uint8 NumReservedBits;
kal_bool OtherRATAvailable;
kal_uint8 OtherRATTXCycle;
kal_uint8 OtherRATSignature;
#endif /* MTK_DEV_C2K_IRAT */
}OMPQuickConfigMsgT;
typedef struct {
kal_uint16 CountryCode;
kal_uint8 SectorID[OMP_SECTORID_LENGTH_IN_BYTE];
kal_uint8 SubnetMask;
kal_uint16 SectorSignature;
kal_uint32 Latitude;
kal_uint32 Longitude;
kal_uint16 RouteUpdateRadiusOverhead;
kal_uint8 LeapSeconds;
kal_uint16 LocalTimeOffset;
kal_uint8 ReverseLinkSilenceDuration;
kal_uint8 ReverseLinkSilencePeriod;
kal_uint8 ChannelCount;
ChanRecGT channelRecord[MAX_CHANNEL_SUPPORT];
kal_uint8 NeighborCount;
kal_uint16 NeighborPilotPN[MAX_CHANNEL_SUPPORT];
NeighborChannelT NeighborChannel[MAX_CHANNEL_SUPPORT];
kal_bool NeighborSearchWindowSizeIncluded;
kal_uint8 NeighborSearchWindowSize[MAX_CHANNEL_SUPPORT];
kal_bool NeighborSearchWindowOffsetIncluded;
kal_uint8 NeighborSearchWindowOffset[MAX_CHANNEL_SUPPORT];
kal_bool ExtendedChannelIncluded;
kal_uint8 ExtendedChannelCount;
ChanRecGT ExtendedChannel[MAX_CHANNEL_SUPPORT];
kal_bool AccessHashingChannelMaskIncluded;
kal_uint8 AccessHashingMaskLength;
AccessHashingChannelMaskRecordT AccessHashingChannelMask[MAX_CHANNEL_SUPPORT*2];
kal_bool RouteUpdateTriggerCodeIncluded;
kal_uint16 RouteUpdateTriggerCode;
kal_uint8 RouteUpdateTriggerMaxAge;
kal_bool PriorSessionGAUP;
kal_bool FPDCHSupportedIncluded;
kal_uint32 FPDCHSupported;
kal_bool SecondaryColorCodeIncluded;
kal_uint8 SecondaryColorCodeCount;
kal_uint8 SecondaryColorCode[MAX_SECONDARY_COLORCODE_NUM];
kal_uint8 Reserved;
} OMPSectorParametersMsgT;
#ifdef MTK_DEV_C2K_IRAT
#define MAX_OMP_PLMN_NUM 8
#define MAX_EUTRA_FREQ_NUM 8
/*IRAT*/
#ifdef MTK_DEV_C2K_IRAT
typedef struct /* 3GPP2 C.S0087 v2.0 7.1 */
{
kal_uint8 ThreshXQ;
kal_uint8 QualMinEUTRA;
kal_bool QualMinEUTRAOffsetIncl;
kal_uint8 QualMinEUTRAOffset;
} OmpIratEUTRANNbrRSRQSpecT;
#endif
/*IRAT*/
typedef struct {
kal_uint16 EARFCN; /* EUTRA channel number */
kal_uint8 EARFCNPriority; /* priority of EARFCN of the neighbir EUTRA system. 0xff means not provided */
kal_uint8 ThreshX; /* Min required signal threshold used for selecting an EARFCN */
kal_uint8 RxLevMinEUTRA; /* Min ref power level to select EUTRA */
kal_uint8 PEMax; /* Max TX power level UE may use when transmitting up-link of EUTRA */
kal_bool RxLevMinEUTRAOffsetIncl;
kal_uint8 RxLevMinEUTRAOffset; /* Offset to min ref power level to select EUTRA. 0xff means not provided */
kal_uint8 MeasurementBandwidth; /* measurement bandwidth Nrb value, Table 7.1-1 */
kal_bool PLMNSameAsPreviousChannel;
kal_uint8 NumPLMNIds; /* number of PLMN on this EARFCN channel */
kal_uint32 PLMNID[MAX_OMP_PLMN_NUM]; /*PLMN ID of the neighbor EUTRA system. 0xffffffff means not provided */
} OmpIratEUTRANNeighborT;
typedef struct {
kal_bool PriorityIncluded;
kal_uint8 ServingPriority;
kal_uint8 ThreshServing;
kal_bool PerEARFCNParamsIncluded;
kal_uint8 RxLevMinEUTRACommon;
kal_uint8 PEMaxCommon;
kal_bool RxLevMinEUTRAOffsetCommonIncl;
kal_uint8 RxLevMinEUTRAOffsetCommon;
kal_bool MaxReselectionTimerIncluded;
kal_uint8 MaxReselectionTimer;
kal_bool SearchBackOffTimerIncluded;
kal_uint8 MinMeasurementBackoff;
kal_uint8 MaxMeasurementBackoff;
kal_bool PLMNIDIncluded;
kal_uint8 NumEUTRAFrequencies;
OmpIratEUTRANNeighborT EUTRAFreq[MAX_EUTRA_FREQ_NUM];
/*IRAT*/
#ifdef MTK_DEV_C2K_IRAT
kal_bool ServingNwPLMNIncl;
kal_uint8 NumServingPLMNIds;
kal_uint32 S_PLMNID[MAX_OMP_PLMN_NUM];
kal_bool RSRQParasIncl;
kal_uint8 QualMinEUTRAComm;
kal_bool QualMinEUTRAOffsetCommIncl;
kal_uint8 QualMinEUTRAOffsetComm;
OmpIratEUTRANNbrRSRQSpecT EUTRARsrqSpec[MAX_EUTRA_FREQ_NUM];
#endif
/*IRAT*/
} OmpEUTRANNeigborListRecT;
typedef struct {
kal_uint8 RATType;
kal_uint16 NeighborListRATRecordLength;
union {
kal_uint8 NeighborListRecord[OMP_MAX_NEIGHBORRAT_REC_LEN];
OmpEUTRANNeigborListRecT OmpEUTRANNeigborListRec;
} u;
} OmpOtherRATRecT;
/* By Keith: The struct for saving Eutran neighbor frequencies */
typedef struct {
kal_uint8 NumEUTRAFrequencies;
kal_uint16 EARFCN[MAX_EUTRA_FREQ_NUM];
} OmpEUTRANNeigborListFreqRecT;
typedef struct {
kal_uint8 OtherRATSignature;
kal_uint8 NumOtherRAT;
OmpOtherRATRecT OmpOtherRATList[OMP_MAX_OTHER_RAT_REC_NUM];
} OMPOtherRATNeighborListMsgT;
typedef struct {
kal_uint8 ReverseLinkSilenceDuration;
kal_uint8 ReverseLinkSilencePeriod;
kal_uint8 Reserved;
} OMPHRPDSilenceParameterMsgT;
#endif /* MTK_DEV_C2K_IRAT */
typedef enum
{
OMP_CACHE_NOTUSED,
OMP_CACHE_INUSE_FOR_IDLE,
OMP_CACHE_INUSE_FOR_CONN
} OmpCacheStateT;
typedef struct
{
kal_uint32 timestamp;
kal_uint16 PilotPN;
OmpCacheStateT stOmpCache;
ChanRecGT ChannelInfo;
OMPQuickConfigMsgT OMPQuickConfigMsg;
OMPSectorParametersMsgT OMPSectorParametersMsg;
} OMPCacheRecT;
typedef struct
{
kal_uint32 oldSectorID24;
kal_uint16 oldSectorSignature;
kal_uint16 newPilotPN;
OmpSubTypeT OmpSubType;
OmpStateT curOmpState;
kal_bool bInUseInitialized;
kal_bool bOverheadParametersUpToDate;
kal_bool bQuickConfigRcvd;
kal_bool bSectorParametersMsgPending;
kal_bool bIHOInProgress;
kal_uint8 oldColorCode;
kal_bool bOldColorCodeValid;
kal_bool bColorCodeChanged;
kal_bool bCurSubnetValid;
OMPCacheRecT *pCurOmpCache;
OMPCacheRecT OmpCacheItems[OMP_MAX_CACHE_RECS];
OMPQuickConfigMsgT OMPQuickConfigMsg;
OMPSectorParametersMsgT OMPSectorParametersMsg;
kal_uint8 curSubnet[OMP_SECTORID_LENGTH_IN_BYTE];
kal_uint8 oldSubnet[OMP_SECTORID_LENGTH_IN_BYTE];
#ifdef MTK_DEV_C2K_IRAT
kal_uint32 SectorID24CacheForRpt;
kal_uint16 oldCountryCode;
kal_bool ConnClosedCacheForRpt;
kal_bool OtherRATUpdated;
kal_uint8 oldOtherRATSignature;
kal_uint8 OtherRATSignatureCacheForRpt;
kal_bool isNeedUpdateOtherRatInfo2Iratm;
OMPHRPDSilenceParameterMsgT OMPHRPDSilenceParametersMsg;
OMPOtherRATNeighborListMsgT OMPOtherRATNeighborListMsg;
OmpEUTRANNeigborListFreqRecT OmpEutranNeigborListFreq;
#endif /* MTK_DEV_C2K_IRAT */
OmpAttribRecT attribOmp[OMP_MAX_INSTANCE];
OmpAttribRecT attribFallback;
}OmpInfoT;
typedef struct {
kal_uint8 Subnet[16];
kal_uint32 ExpiredSysTime;
kal_uint16 RouteUpdateTriggerCode;
} RouteUpdateTriggerCodeItemT;
/*----------------------------------------------------------------------------
Global Data
----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Global Function Prototypes
----------------------------------------------------------------------------*/
void OmpInit(void);
void RunOmpStateMachine(kal_uint32 MsgId, void *MsgDataP);
void ProcessOmpActivateMsg(void);
void ProcessOmpDeactivateMsg(void);
void ProcessOmpRupIdleHandoffMsg(OmpRupIdleHandoffMsgT *MsgDataP);
void ProcessOmpCspConnClosedMsg(void);
void ProcessOmpAcmSysParmUpdReqMsg(void);
void ProcessOmpDsaFwdMsg(DsaFwdMsgT *MsgDataP);
void ProcessOmpSupervisionTmrExpired(kal_uint32 TimerId);
void ProcessOmpIHOOhmDecodeTmrExpired(void);
void ProcessOmpScpReconfiguredMsg(void);
void ProcessOmpScpCommittedMsg(void);
void OmpInitStructures( kal_uint8 SubType, kal_bool InUse);
kal_uint8 OmpGetPriorSessionGAUP(void);
void OmpIdpClearIHOFlag(void);
void OmpSetOverheadParametersUpToDate(kal_bool bUpdated, kal_bool bNeedUpdateAll,kal_bool bClearQuickConfigRcvdFlag,kal_bool bResetSubnet);
void OmpSupTimerReset(void);
#ifdef MTK_DEV_C2K_IRAT
void ProcessOmpIratMccReqMsg(void);
kal_bool OmpGetOtherRatAvail (void);
#ifdef MTK_PLT_ON_PC_UT
kal_bool OmpSetOtherNeighBorListMsg (OmpEUTRANNeigborListRecT *pEutranNlRec,kal_bool *bOmpEarfcnIschanged);
#else
kal_bool OmpSetIratmOtherNeighBorListMsg (kal_bool *bOmpEarfcnIschanged);
#endif
#endif /* MTK_DEV_C2K_IRAT */
void ProcessOmpCssSystemValidatedMsg(void);
kal_bool OmpGetIHOPilotPN(kal_uint16 *newPilotPN);
void setUpdateOtherRat2IratmFlag(kal_bool isNeedUpdate);
/*****************************************************************************
* $Log: clcomp.h $
*****************************************************************************/
/*****************************************************************************
* End of File
*****************************************************************************/
#endif /*_CLCOMP_H_*/