/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates

This software file (the "File") is owned and distributed by Marvell 
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or 
modify this File in accordance with the terms and conditions of the General 
Public License Version 2, June 1991 (the "GPL License"), a copy of which is 
available along with the File in the license.txt file or by writing to the Free 
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or 
on the worldwide web at http://www.gnu.org/licenses/gpl.txt. 

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED 
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY 
DISCLAIMED.  The GPL License provides additional details about this warranty 
disclaimer.
********************************************************************************
Marvell BSD License Option

If you received this File from Marvell, you may opt to use, redistribute and/or 
modify this File under the following licensing terms. 
Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:

    *   Redistributions of source code must retain the above copyright notice,
	    this list of conditions and the following disclaimer. 

    *   Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution. 

    *   Neither the name of Marvell nor the names of its contributors may be 
        used to endorse or promote products derived from this software without 
        specific prior written permission. 
    
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

******************************************************************************/

/******************************************************************************
**  FILE        : gponOnuPm.h                                                **
**                                                                           **
**  DESCRIPTION : This file contains ONU GPON Alarm and Statistics           **
*******************************************************************************
*                                                                             *                              
*  MODIFICATION HISTORY:                                                      *
*                                                                             *
*   29Oct06  Oren Ben Hayun   created                                         *  
* =========================================================================== *      
******************************************************************************/
#ifndef _ONU_GPON_PM_H
#define _ONU_GPON_PM_H

/* Definitions
------------------------------------------------------------------------------*/ 

/* Enums                              
------------------------------------------------------------------------------*/ 
#ifdef MV_GPON_PERFORMANCE_CHECK
typedef enum
{
  PON_ISR_PERFORMANCE              = 0, 
  PON_MNG1_PERFORMANCE             = 1,  
  PON_MNG2_PERFORMANCE             = 2,
  PON_MNG3_PERFORMANCE             = 3,
  PON_EXT_BURST_PLOAM_PERFORMANCE  = 4,
  PON_KEY_SWITCH_PLOAM_PERFORMANCE = 5,
  PON_CFG_PORT_PLOAM_PERFORMANCE   = 6,
  PON_REQ_KEY_PLOAM_PERFORMANCE    = 7,
  PON_ALLOC_ID_PLOAM_PERFORMANCE   = 8,
  PON_PASS_PLOAM_PERFORMANCE       = 9,
  PON_ENC_PORT_PLOAM_PERFORMANCE   = 10,
  PON_DIS_PLOAM_PERFORMANCE        = 11,
  PON_DACT_PLOAM_PERFORMANCE       = 12,
  PON_RNG_PLOAM_PERFORMANCE        = 13,
  PON_ONU_ID_PLOAM_PERFORMANCE     = 14,
  PON_OVERHEAD_PLOAM_PERFORMANCE   = 15,
  PON_MAX_PERFORMANCE              = 16
}E_GponPerformanceCheck;
#endif /* MV_GPON_PERFORMANCE_CHECK */

/* Typedefs
------------------------------------------------------------------------------*/
typedef struct
{
  MV_U32 rxMsgIdPloamCounter [ONU_GPON_DS_MSG_LAST+1];
  MV_U32 rxMsgTotalPloamCounter;
  MV_U32 txErrMsgIdPloamCounter [ONU_GPON_US_MSG_LAST+1];
  MV_U32 txMsgIdPloamCounter[ONU_GPON_US_MSG_LAST+1];
  MV_U32 txMsgTotalPloamCounter;
}S_PloamSwPm;

typedef struct
{
  MV_U32 idlePloamCounter;
  MV_U32 crcErrorPloamCounter;
  MV_U32 fifoOverErrorPloamCounter;
  MV_U32 receivedBroadcastPloamCounter;
  MV_U32 receivedOnuIdPloamCounter;
  MV_U32 rxMsgIdPloamCounter [ONU_GPON_DS_MSG_LAST+1];
  MV_U32 rxMsgTotalPloamCounter;
}S_RxPloamPm;

typedef struct
{
  MV_U32 txErrMsgIdPloamCounter [ONU_GPON_US_MSG_LAST+1];
  MV_U32 txMsgIdPloamCounter    [ONU_GPON_US_MSG_LAST+1];
  MV_U32 txMsgTotalPloamCounter;
}S_TxPloamPm;

typedef struct                                       
{
  MV_U32 allocCrcErr;
  MV_U32 allocCorrectableCrcErr;
  MV_U32 allocUnCorrectableCrcErr;
  MV_U32 allocCorrec;
  MV_U32 totalReceivedAllocBytes;
}S_RxBwMapPm;

typedef struct
{
  MV_U32 receivedBytes;
  MV_U32 correctedBytes;
  MV_U32 correctedBits;
  MV_U32 receivedCodeWords;
  MV_U32 uncorrectedCodeWords;
}S_RxFecPm;

typedef struct
{
  MV_U32 plend;
}S_RxPlendPm;

typedef struct
{
  MV_U32 bip8;
}S_RxBip8Pm;

typedef struct
{
  MV_U32 receivedIdleGemFrames;
  MV_U32 receivedValidGemFrames;
  MV_U32 receivedUndefinedGemFrames;
  MV_U32 receivedOmciFrames;
  MV_U32 droppedGemFrames;
  MV_U32 droppedOmciFrames;
  MV_U32 receivedGemFramesWithUncorrHecErr;
  MV_U32 receivedGemFramesWithOneFixedHecErr;
  MV_U32 receivedGemFramesWithTwoFixedHecErr;
  MV_U32 totalByteCountOfReceivedValidGemFrames;
  MV_U32 totalByteCountOfReceivedUndefinedGemFrames;
  MV_U32 gemReassembleMemoryFlush;
  MV_U32 gemSynchLost;
  MV_U32 receivedEthFramesWithCorrFcs;
  MV_U32 receivedEthFramesWithFcsError;
  MV_U32 receivedOmciFramesWithCorrCrc;
  MV_U32 receivedOmciFramesWithCrcError;
}S_GemPm;

typedef struct
{
  MV_U32 transmittedGemPtiTypeOneFrames;   
  MV_U32 transmittedGemPtiTypeZeroFrames;  
  MV_U32 transmittedIdleGemFrames;         
  MV_U32 transmittedTxEnableCount;         
  MV_U32 transmittedEthFramesViaTconti[ONU_GPON_MAX_NUM_OF_T_CONTS];    
  MV_U32 transmittedEthBytesViaTconti[ONU_GPON_MAX_NUM_OF_T_CONTS];     
  MV_U32 transmittedGemFramesViaTconti[ONU_GPON_MAX_NUM_OF_T_CONTS];     
  MV_U32 transmittedIdleGemFramesViaTconti[ONU_GPON_MAX_NUM_OF_T_CONTS];
}S_GponTxPm;

typedef struct
{
  S_RxBwMapPm rxBwMap;
  S_RxPloamPm rxPloam;
  S_TxPloamPm txPloam;
  S_RxPlendPm rxPlend;
  S_RxFecPm   rxFec;
  S_RxBip8Pm  rxBip8;
  S_GemPm     gem;
  S_GponTxPm  tx;
}S_GponPm;

#ifdef MV_GPON_PERFORMANCE_CHECK
typedef struct
{
  MV_U32 *uSecCntStart;
  MV_U32 *uSecCntStop;
  MV_U32  uSecCntIdx;
}S_GponPerformanceCheckNode;

typedef struct
{
  S_GponPerformanceCheckNode pmCheckNode[PON_MAX_PERFORMANCE];
}S_GponPerformanceCheck;
#endif /* MV_GPON_PERFORMANCE_CHECK */


typedef struct
{
  MV_BOOL in_use;
  MV_U16  gem_port;
  MV_U32  counter_set;
}S_apiGemPortPmConfig;

#define MAX_SUPPORTED_GEMPORTS_FOR_PM           8
#define MAX_ENTRIES_GEMPORTPM_CONFIG_DB         32
typedef struct
{
  S_apiGemPortPmConfig apiGemPortPmConfigAra[MAX_ENTRIES_GEMPORTPM_CONFIG_DB];
  MV_U32               origRxMibDefaultReg;
}S_apiGemPortPmConfigDb;



/* Global variables
------------------------------------------------------------------------------*/
#ifdef MV_GPON_PERFORMANCE_CHECK
extern S_GponPerformanceCheck g_GponPmCheck;
#endif /* MV_GPON_PERFORMANCE_CHECK */

/* Global functions
------------------------------------------------------------------------------*/
#ifdef MV_GPON_PERFORMANCE_CHECK
MV_STATUS onuGponPmInit(void);
#endif /* MV_GPON_PERFORMANCE_CHECK */
void      onuGponPmInPmInit(void);
void      onuGponPmTimerPmHndl(unsigned long data);
void      onuGponPmTimerExpireHndl(void);
MV_STATUS onuGponPmCountersAdd(void);
MV_STATUS onuGponPmRxSwCountersAdd(MV_U8 a_msgId);
MV_STATUS onuGponPmSwCountersUpdate(S_RxPloamPm *rxPloamPm, S_TxPloamPm *txPloamPm);
MV_STATUS onuGponPmFecPmGet(S_RxFecPm *fecPm);
MV_STATUS onuGponPmRxPloamPmGet(S_RxPloamPm *rxPloamPm);
MV_STATUS onuGponPmTxPloamPmGet(S_TxPloamPm *txPloamPm);
MV_STATUS onuGponPmRxBwMapPmGet(S_RxBwMapPm *rxBwMapPm);
MV_STATUS onuGponPmRxBwMapCountersAdd(void);
MV_STATUS onuGponPmRxPlendPmGet(S_RxPlendPm *rxPlendPm);
MV_STATUS onuGponPmRxBip8PmGet(S_RxBip8Pm *rxBip8Pm);
MV_STATUS onuGponPmGemPmGet(S_GemPm *gemPm);
MV_STATUS onuGponPmTxPmGet(S_GponTxPm *txPm);
MV_STATUS onuGponPmTxBurstEnCntGet(unsigned int *txBurstEnCnt);

MV_STATUS onuGponPmGemPortPmStart(MV_U16 gemPort);
MV_STATUS onuGponPmGemPortPmStop (MV_U16 gemPort);
MV_STATUS onuGponPmGemPortPmGet  (MV_U16 gemPort, S_GponIoctlGemPortMibCounters *gemPortMibCounters);
MV_STATUS onuGponPmGemPortPmReset(void);
void      onuGponPmGemPortPmInit (void);
MV_STATUS onuGponPmGemPortPmConfigGet(MV_U16 dbIdx, S_apiGemPortPmConfig *gemPortPmConfig);

/* Macros
------------------------------------------------------------------------------*/    

#endif /* _ONU_GPON_PM_H */
  


