blob: 3f36f94ff7ea5955fa03c29736d8d44eab11b97b [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 _CLCIDP_H_
#define _CLCIDP_H_ 1
/*****************************************************************************
*
* FILE NAME : clcidp.h
*
* DESCRIPTION : This file includes the definition of IDP
*
* HISTORY :
* See Log at end of file
*
*****************************************************************************/
/*----------------------------------------------------------------------------
Include Files
----------------------------------------------------------------------------*/
#include "do_clcapi.h"
#include "do_rupapi.h"
#include "do_idpapi.h"
#include "do_dsaapi.h"
#include "rmcsch.h"
#include "slc_nvram.h"
/*----------------------------------------------------------------------------
Global Defines and Macros
----------------------------------------------------------------------------*/
#define IDP_ATTRIB_PCCC_BIT 0x01
#define IDP_ATTRIB_SM_BIT 0x02
#define IDP_ATTRIB_PM_BIT 0x04
#define IDP_ATTRIB_AHCM_BIT 0x08
#define IDP_ATTRIB_SSCA_BIT 0x10
#define IDP_PAGINGMASK_1X_BIT 0x01
#define IDP_PAGINGMASK_WIFI_BIT 0x02
#define IDP_DEFAULT_PERIOD_SLOTS 3072
#ifdef MTK_DEV_C2K_IRAT
#define MAX_PNLIST_REC_NUM 16
#endif /* MTK_DEV_C2K_IRAT */
/*----------------------------------------------------------------------------
Global Typedefs
----------------------------------------------------------------------------*/
typedef enum
{
IDP_INACTIVE_ST,
IDP_MONITOR_ST,
IDP_SLEEP_ST,
IDP_CONN_SETUP_ST,
IDP_FREEZE_PENDING_ST,
IDP_FREEZE_ST,
IDP_CONN_FROZEN_ST,
IDP_STATE_MAX
} IdpStateT;
typedef enum
{
IDP_DEFAULT,
IDP_ENHANCED,
IDP_MAX_PROT
} IdpSubTypeT;
typedef enum
{
IDP_INCONFIG,
IDP_INUSE,
IDP_MAX_INSTANCE
} IdpInstanceT;
typedef enum
{
IDP_PAGE_MESSAGE,
IDP_CONNECTION_REQUEST_MESSAGE,
IDP_CONNECTION_DENY_MESSAGE,
IDP_CONFIG_REQUEST_MESSAGE = 0x50,
IDP_CONFIG_RESPONSE_MESSAGE,
IDP_ATTRIB_UPDATE_REQUEST_MESSAGE,
IDP_ATTRIB_UPDATE_ACCEPT_MESSAGE,
IDP_ATTRIB_UPDATE_REJECT_MESSAGE,
IDP_MAX_MESSAGE_ID
} IdpMessageTypeT;
typedef enum
{
REQ_REASON_AT_INITIATED,
REQ_REASON_AN_INITIATED,
REQ_REASON_INVALID
} IdpRequestReasonT;
typedef enum
{
DENY_REASON_GENERAL,
DENY_REASON_NETWORK_BUSY,
DENY_REASON_AUTH_OR_BILL_FAILURE,
DENY_CONN_REQ_INPROGRESS_FAILURE,
DENY_CONN_SETUP_TIMER_EXPIRED,
DENY_REASON_RESERVED
} IdpConnDenyReasonT;
typedef struct
{
kal_uint8 MaskMap;
MaskRecordT Mask[MAX_MASKCOUNT];
} PagingMaskPrefT;
typedef enum
{
IDP_ATTRIB_PCCC, /*Preferred Control Channel Cycle Attribute ID, 0x00*/
IDP_ATTRIB_SM, /*SlottedMode Attribute ID, 0x01 */
IDP_ATTRIB_PM, /* Paging MaskAttribute ID, 0x02 */
IDP_ATTRIB_AHCM = 0xfe, /*AccessHashingClassMask Attribute Id, 0xfe */
IDP_ATTRIB_SSCA /*Small Slot Cycle Allowed Attribute Id, 0xff */
} IdpAttribIdT;
typedef enum
{
IHO_WAKE_REDUCTION_STATE_INACTIVE,
IHO_WAKE_REDUCTION_STATE_ACTIVE,
IHO_WAKE_REDUCTION_STATE_MINIACQ,
IHO_WAKE_REDUCTION_STATE_WAKEUP,
IHO_WAKE_REDUCTION_STATE_MONITOR,
IHO_WAKE_REDUCTION_STATE_SEARCHDONE,
IHO_WAKE_REDUCTION_STATE_COMPLETE
} IHOWakeReductionStateT;
#ifdef MTK_DEV_C2K_IRAT
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
typedef enum
{
IDP_RSVAS_OCCUPY_STATUS_NULL,
IDP_RSVAS_OCCUPY_STATUS_WAIT_CNF,
IDP_RSVAS_OCCUPY_STATUS_WAIT_CNF_FOR_FAST_CONN,
IDP_RSVAS_OCCUPY_STATUS_WAIT_IND,
IDP_RSVAS_OCCUPY_STATUS_WAIT_IND_FOR_FAST_CONN,
IDP_RSVAS_OCCUPY_STATUS_COMPLETE
} IdpRsvasOccupyStatusT;
#endif /* MTK_DEV_C2K_IRAT */
typedef struct
{
IdpSubTypeT IdpSubType;
IdpStateT curIdpState;
kal_bool bInUseInitialized;
kal_bool bSlottedModeEnabled;
kal_bool bConnectionReqInProgress;
kal_bool bDsarAccessInProgress;
kal_bool bSessionCloseInprogress;
kal_bool bSessionIsActive;
kal_bool bSubnetChangedOrCommittingIndication;
kal_bool bConnectionReqPending;
IdpAlmpOpenConnMsgT IdpAlmpOpenConnMsgPended;
kal_uint8 nAcmacTxStartedCount;
kal_bool bSleepCapsuleDoneRcvd;
kal_bool bSectorParmsUpdated;
kal_bool bSuspendPeriodInActive;
kal_bool bOMPUPdatedMsgPended;
kal_bool bChannelSelectPended;
kal_bool bPagePended;
kal_bool bProhibitEnterSleepForPageRcvd;
kal_bool bSessionSeedPended;
kal_uint8 ChannelCount;
ChanRecGT Channel[64];
kal_uint8 RUPSupportedChannelCount;
ChanRecGT RUPSupportedChannel[64];
kal_uint8 nSyncCapsuleOffset;
kal_bool bSessionSeedValid;
kal_uint32 nSessionSeed;
kal_uint32 nATI;
IdpAttribRecT attribIdp[IDP_MAX_INSTANCE];
IdpAttribRecT attribFallback;
kal_uint32 nPeriod1;
kal_uint32 nPeriod2;
kal_uint32 nPeriod3;
kal_uint32 nT12;
kal_uint32 nT23;
PagingMaskPrefT PagingMaskPref;
kal_uint16 TDualIdleForDefaultType;
kal_uint16 TDualIdle;
kal_uint16 THRPDExtendedSC;
kal_bool bImdWakeup;
kal_bool bSrchDone;
#ifdef MTK_DEV_C2K_IRAT
kal_bool bOtherRATAvailable;
kal_uint8 OtherRATSlotCycle;
kal_bool bOtherRATUpdated;
#endif /* MTK_DEV_C2K_IRAT */
kal_bool bIdpIHOWakeReductionEnable;
kal_uint32 nLongPeriod;
kal_uint32 curPeriod;
kal_bool bByPassSessionStatusForSleep;
kal_uint8 numHashCh;
kal_uint8 curHashIdx;
kal_bool bNeedSpecialSessionSeed;
kal_uint8 nNetworkLostCout;
kal_bool bWakeupInd;
kal_uint16 T_Dfs_TimerMSC;
kal_uint16 T_Dfs_NumChan;
} IdpInfoT;
/* IDP ConnectionDeny Message*/
typedef struct {
kal_uint8 nTransactionID;
kal_uint8 nDenyReason;
kal_uint8 nReserved;
} IdpConnectionDenyT;
typedef struct
{
kal_bool bSloteMode;
kal_uint16 ChannelNum;
kal_uint8 FrameUpper6;
kal_uint32 FrameLow32;
} EtsGetDoSysStatusRspT;
/*----------------------------------------------------------------------------
Global Data
----------------------------------------------------------------------------*/
extern RmcSchDataCtxT RmcSchDataCtx;
/*----------------------------------------------------------------------------
Global Function Prototypes
----------------------------------------------------------------------------*/
void IdpInit(void);
void IdpInitialize(void);
void IdpCalcT12AndT23Value(void);
void RunIdpStateMachine(kal_uint32 MsgId, void *MsgDataP);
void ProcessIdpAlmpActivateMsg(IdpAlmpActiveMsgT *MsgDataP);
void ProcessIdpAlmpDeactivateMsg(IdpAlmpDeactiveMsgT *MsgDataP);
void ProcessIdpAlmpOpenConnMsg(IdpAlmpOpenConnMsgT *MsgDataP);
void ProcessIdpAlmpCloseMsg(void);
void ProcessIdpRupConnectionInitiatedMsg(void);
void ProcessIdpRupConnectionOpenedMsg(void);
void ProcessIdpRupIHOResultMsg(IdpRupIHOResultMsg* MsgDataP);
void ProcessIdpHscFreezeMsg(void);
void ProcessIdpHscThawMsg(void);
void ProcessIdpHscResyncIndMsg(void);
void ProcessIdpHscResyncDeniedMsg(IdpHscResyncDeniedMsgT *MsgDataP);
void ProcessIdpHscWakeupIndMsg(IdpHscWakeupIndMsgT *MsgDataP);
void ProcessIdpAcmTxStartedMsg(void);
void ProcessIdpAcmTxEndedMsg(IdpAcmTxEndedMsgT *MsgDataP);
void ProcessIdpCcmSleepCapsuleDoneMsg(void);
void ProcessIdpDsaFwdMsg(DsaFwdMsgT *MsgDataP);
void ProcessIdpDsaTxStatusMsg(DsarTxStatusMsgT *MsgDataP);
void ProcessIdpSmpSessionOpenedMsg(void);
void ProcessIdpSmpSessionClosedMsg(IdpSmpSessionClosedMsgT *MsgDataP);
void ProcessIdpSmpSessionStatusMsg(IdpSmpSessionStatusMsgT *MsgDataP);
void ProcessIdpOmpUpdatedMsg(IdpOmpUpdatedMsgT *MsgDataP);
void ProcessIdpCspSuspenPeriodTimeMsg(IdpCspSuspendPeriodTimeMsgT *MsgDataP);
void ProcessIdpCspConnectionClosedMsg(void);
void ProcessIdpAmpSessionSeedMsg(IdpAmpSessionSeedMsgT *MsgDataP);
void ProcessIdpCcmOffsetMsg(IdpCcmOffsetMsgT *MsgDataP);
void ProcessIdp1XPsPagingMaskSetMsg(Idp1XPsPagingMaskSetMsgT *MsgDataP);
void ProcessIdpEltSlottedModeSetMsg(IdpSlottedModeSetMsgT *MsgDataP);
void ProcessIdpScpReconfiguredMsg(void);
void ProcessIdpScpCommittedMsg(void);
void IdpInitStructures( kal_uint8 SubType, kal_bool InUse);
void ProcessIdpConnectionSetupTmrExpired(void);
void ProcessIdpPagePendingTmrExpired(void);
void ProcessIdpSuspendPeriodTmrExpired(void);
void ProcessIdpNoSrchDoneWakeUpTmrExpired(void);
void ProcessIdpDfsTmrExpired(void);
void ProcessIdpEltHardoffTestMsg(IdpEltHandoffMsgT *HandoffMsg);
kal_bool IdpCheckSubTypeInUseAndInConfigProtocol(void);
void ProcessIdpAlmpSysInfoUpdateMsg(IdpAlmpSysInfoUpdateMsgT *MsgDataP);
void ProcessIdpEltGetDoSysStatusMsg(ExeRspMsgT* pMsg);
void ProcessIdpDsarAccessStartMsg(void);
void ProcessIdpDsarAccessStopMsg(IdpDsarAccessEndedMsgT *MsgDataP);
void ProcessIdpPrefCCCycleMsg(DoPrefCCModeSetMsgT* MsgDataP);
void ProcessIdpExtendedSlotCycleSetMsg(IdpExtendedSlotCycleSetMsgT *MsgDataP);
void ProcessIdpRupChannelChangedIndMsg(IdpRupChannelChangedIndMsgT *MsgDataP);
void ProcessIdpRupForceIHORspMsg(IdpRupForceIHORspMsgT* MsgDataP);
void ProcessIdpBlockIHOWakeReductionExpired(void);
void ProcessIdpRmcInterHoCnfMsg(void);
void ProcessIdpRmcIhoWakeReductionStateCnfMsg(IdpRmcIHOWakeReductionStateCnfMsgT *MsgDataP);
void ProcessIdpRmcIhoForceAcqOvhdIndMsg(IdpRmcForceAcqOvhdIndMsgT *MsgDataP);
kal_bool IdpGetIdpFreezeState(void);
void IdpGetCurChanInfo(ChanRecGT *pCurChanInfo);
#ifdef MTK_DEV_C2K_IRAT
void ProcessIdpOmpOtherRATUpdatedMsg(IdpOmpOtherRatUpdatedMsgT *MsgDataP);
void ProcessIdpContinueRcvUatiAssignmentTmrExpired(void);
void IdpProbeTxingProtectionDetermine(kal_bool bProtectStatus);
void ProcessClcRmcIdleModeCfgCnfMsg(void);
#endif /* MTK_DEV_C2K_IRAT */
kal_bool IdpCheckReadyForPowerDown(void);
kal_bool IdpNeedChanHash(IdpOmpUpdatedMsgT *MsgDataP);
void ProcessIdpRupDfsEndMsg(IdpRupDfsEndMsgT *MsgDataP);
void processIdpDfsTimerSetMsg(IdpDfsTimerSetMsgT *MsgDataP);
void ProcessIdpHscTxAvailableInd(void);
#ifdef __EVL3_EM_MODE__
IdpInfoT* IdpShareIDPInfo(void);
#endif
void IdpSignalInteractiveProtectDetermine (kal_uint16 protocolType, kal_uint32 msgId, ConfirmResponseE Status);
void ProcessIdpWfrRmcInterHoCnfExpired(void);
IdpStateT IdpStateGet(void);
#ifdef MTK_DEV_C2K_IRAT
void ProcessIdpWfrRsvasOccupyIndTimerExpired (void);
#endif
void ProcessIdpGuardNonSlottedModeExpired(void);
/*****************************************************************************
* $Log: clcidp.h $
*****************************************************************************/
/*****************************************************************************
* End of File
*****************************************************************************/
#endif /*_CLCIDP_H_*/
/**Log information: \main\CBP80\cbp80_jzwang_scbp10066\1 2012-07-19 04:50:08 GMT jzwang
** Made the change to handle the DO Long sleep command from IRAT when DO in sleep state**/
/**Log information: \main\Trophy\Trophy_ylxiao_href22158\1 2013-04-19 09:40:29 GMT ylxiao
** HREF#22158, remove compile warnings, fix bug**/
/**Log information: \main\Trophy\1 2013-04-22 01:48:23 GMT zlin
** HREF#22158. merge code.**/
/**Log information: \main\Trophy\Trophy_yzhang_href22247\1 2013-07-30 06:34:55 GMT yzhang
** HREF#22274=>fix concurrent UATIRequest and connectionrequest**/
/**Log information: \main\Trophy\2 2013-07-30 07:08:05 GMT jzwang
** href#22247**/